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::Comments;
|
||||
|
||||
my $contents = "/home/nathan/Projects/Idris/structures/test/src/Main.idr".IO.slurp;
|
||||
unit sub MAIN;
|
||||
|
||||
say "\nTesting full flagged-expression:";
|
||||
say $contents ~~ &flagged-expression;
|
||||
when $contents ~~ &flagged-expression {
|
||||
say $<test-name>;
|
||||
say $<expression-name>;
|
||||
say $<flag><type>;
|
||||
}
|
||||
temp $*CWD = "/home/nathan/Projects/Idris/structures/".IO;
|
||||
|
||||
say scan-packages;
|
||||
|
|
|
@ -3,6 +3,39 @@ unit module IUtils;
|
|||
|
||||
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
|
||||
|
||||
#| Invoke a pack command
|
||||
|
@ -24,17 +57,34 @@ sub pack-run(*@cmd) is export {
|
|||
|
||||
#| Build a package with pack
|
||||
sub pack-build($pkg) is export {
|
||||
pack-run 'build', $pkg;
|
||||
pack-run 'build', $pkg
|
||||
}
|
||||
|
||||
#| Test a package with pack
|
||||
sub pack-test($pkg) is export {
|
||||
pack-run 'build', $pkg;
|
||||
pack-run 'build', $pkg
|
||||
}
|
||||
|
||||
#| Clean a package with pack
|
||||
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
|
||||
|
@ -43,7 +93,10 @@ sub idris-run(*@cmd) is export {
|
|||
my $out = $proc.out.slurp(:close);
|
||||
my $err = $proc.err.slurp(:close);
|
||||
unless $proc {
|
||||
($out, $err)
|
||||
IdrisError.new(
|
||||
out => $out, err => $err,
|
||||
exit-code => $proc.exitcode, command => @cmd.Str)
|
||||
.throw;
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue