Project enumeration
This commit is contained in:
parent
197dd79b34
commit
0a0596b143
12
bin/iutils
12
bin/iutils
|
@ -3,12 +3,8 @@ use v6.d;
|
||||||
use IUtils;
|
use IUtils;
|
||||||
use IUtils::Comments;
|
use IUtils::Comments;
|
||||||
|
|
||||||
my $contents = "/home/nathan/Projects/Idris/structures/test/src/Main.idr".IO.slurp;
|
unit sub MAIN;
|
||||||
|
|
||||||
say "\nTesting full flagged-expression:";
|
temp $*CWD = "/home/nathan/Projects/Idris/structures/".IO;
|
||||||
say $contents ~~ &flagged-expression;
|
|
||||||
when $contents ~~ &flagged-expression {
|
say scan-packages;
|
||||||
say $<test-name>;
|
|
||||||
say $<expression-name>;
|
|
||||||
say $<flag><type>;
|
|
||||||
}
|
|
||||||
|
|
|
@ -3,6 +3,39 @@ unit module IUtils;
|
||||||
|
|
||||||
need IUtils::IDEMode;
|
need IUtils::IDEMode;
|
||||||
|
|
||||||
|
use paths;
|
||||||
|
|
||||||
|
#| Structure representing the root of what idris considers a package directory,
|
||||||
|
#| with the associated ipkg and source files. These can and will overlap within
|
||||||
|
#| the same directory.
|
||||||
|
class PackageInfo {
|
||||||
|
has IO::Path:D $.ipkg is required;
|
||||||
|
has IO::Path:D $.root is required;
|
||||||
|
has IO::Path:D @.sources is required;
|
||||||
|
}
|
||||||
|
|
||||||
|
#| Scan a particular ipkg for its associated sources
|
||||||
|
sub scan-ipkg(IO::Path:D $ipkg --> PackageInfo:D) {
|
||||||
|
my $contents = $ipkg.slurp;
|
||||||
|
my $src-dir =
|
||||||
|
($contents ~~
|
||||||
|
/ 'sourcedir' \h* '=' \h*
|
||||||
|
'"' $<value>=[<-["]>*] '"' /)<value>
|
||||||
|
// "src";
|
||||||
|
|
||||||
|
my IO::Path:D @sources =
|
||||||
|
paths($ipkg.parent.add($src-dir), :file(*.ends-with(".idr"))).map(*.IO);
|
||||||
|
PackageInfo.new(ipkg => $ipkg, root => $ipkg.parent, sources => @sources)
|
||||||
|
}
|
||||||
|
|
||||||
|
#| Scan $*CWD to locate ipkgs and their associated sources
|
||||||
|
sub scan-packages(--> Array[PackageInfo:D]) is export {
|
||||||
|
my PackageInfo:D @ipkgs =
|
||||||
|
paths(:file(*.ends-with(".ipkg"))).map(*.IO.&scan-ipkg);
|
||||||
|
return @ipkgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# Utility functions for pack
|
# Utility functions for pack
|
||||||
|
|
||||||
#| Invoke a pack command
|
#| Invoke a pack command
|
||||||
|
@ -24,17 +57,34 @@ sub pack-run(*@cmd) is export {
|
||||||
|
|
||||||
#| Build a package with pack
|
#| Build a package with pack
|
||||||
sub pack-build($pkg) is export {
|
sub pack-build($pkg) is export {
|
||||||
pack-run 'build', $pkg;
|
pack-run 'build', $pkg
|
||||||
}
|
}
|
||||||
|
|
||||||
#| Test a package with pack
|
#| Test a package with pack
|
||||||
sub pack-test($pkg) is export {
|
sub pack-test($pkg) is export {
|
||||||
pack-run 'build', $pkg;
|
pack-run 'build', $pkg
|
||||||
}
|
}
|
||||||
|
|
||||||
#| Clean a package with pack
|
#| Clean a package with pack
|
||||||
sub pack-clean($pkg) is export {
|
sub pack-clean($pkg) is export {
|
||||||
pack-run 'clean', $pkg;
|
pack-run 'clean', $pkg
|
||||||
|
}
|
||||||
|
|
||||||
|
# Utility functions for idris
|
||||||
|
|
||||||
|
#| An error coming from the idris compiler
|
||||||
|
class IdrisError is Exception {
|
||||||
|
has Str $.out;
|
||||||
|
has Str $.err;
|
||||||
|
has Int $.exit-code;
|
||||||
|
has Str $.command;
|
||||||
|
|
||||||
|
method message {
|
||||||
|
qq:to/END/;
|
||||||
|
Error running idris command: $.command
|
||||||
|
Command exited with $.exit-code
|
||||||
|
END
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#| Invoke an idris command
|
#| Invoke an idris command
|
||||||
|
@ -43,7 +93,10 @@ sub idris-run(*@cmd) is export {
|
||||||
my $out = $proc.out.slurp(:close);
|
my $out = $proc.out.slurp(:close);
|
||||||
my $err = $proc.err.slurp(:close);
|
my $err = $proc.err.slurp(:close);
|
||||||
unless $proc {
|
unless $proc {
|
||||||
($out, $err)
|
IdrisError.new(
|
||||||
|
out => $out, err => $err,
|
||||||
|
exit-code => $proc.exitcode, command => @cmd.Str)
|
||||||
|
.throw;
|
||||||
}
|
}
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue