From 49c118eef44315332d944d23ab0e70ed19ccfa8b Mon Sep 17 00:00:00 2001 From: Nathan McCarty Date: Tue, 31 Dec 2024 16:30:53 +0000 Subject: [PATCH] Refactor compiler interaction --- META6.json | 3 +- lib/IUtils.rakumod | 71 ------------------------------------ lib/IUtils/Compiler.rakumod | 72 +++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 72 deletions(-) create mode 100644 lib/IUtils/Compiler.rakumod diff --git a/META6.json b/META6.json index 8b12ce9..0918894 100644 --- a/META6.json +++ b/META6.json @@ -12,7 +12,8 @@ "provides": { "IUtils": "lib/IUtils.rakumod", "IUtils::IDEMode": "lib/IUtils/IDEMode.rakumod", - "IUtils::Regexs": "lib/IUtils/Regexes.rakumod" + "IUtils::Regexs": "lib/IUtils/Regexes.rakumod", + "IUtils::Compiler": "lib/IUtils/Compiler.rakumod" }, "bin": { "iutils": "bin/iutils" diff --git a/lib/IUtils.rakumod b/lib/IUtils.rakumod index d41c8f8..d6d896d 100644 --- a/lib/IUtils.rakumod +++ b/lib/IUtils.rakumod @@ -37,74 +37,3 @@ sub scan-packages(--> Array[PackageInfo:D]) is export { paths(:file(*.ends-with(".ipkg"))).map(*.IO.&scan-ipkg); return @ipkgs; } - - -# Utility functions for pack - -#| Invoke a pack command -sub pack-run(*@cmd) is export { - my $proc = run "pack", @cmd, :out, :err; - my $out = $proc.out.slurp(:close); - my $err = $proc.err.slurp(:close); - unless $proc { - die qq:to/END/; - Pack Failure! - Captured Output: - $out - - Captured StdErr: - $err - END - } -} - -#| Build a package with pack -sub pack-build($pkg) is export { - pack-run 'build', $pkg -} - -#| Test a package with pack -sub pack-test($pkg) is export { - pack-run 'build', $pkg -} - -#| Clean a package with pack -sub pack-clean($pkg) is export { - 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 -sub idris-run(*@cmd) is export { - my $proc = run "idris2", @cmd, :out, :err; - my $out = $proc.out.slurp(:close); - my $err = $proc.err.slurp(:close); - unless $proc { - IdrisError.new( - out => $out, err => $err, - exit-code => $proc.exitcode, command => @cmd.Str) - .throw; - } - return $out; -} - -#| Exec the expression with the given name in the given file -sub idris-exec($expr, $file) is export { - idris-run '--find-ipkg', '--exec', $expr, $file -} diff --git a/lib/IUtils/Compiler.rakumod b/lib/IUtils/Compiler.rakumod new file mode 100644 index 0000000..d8bfcba --- /dev/null +++ b/lib/IUtils/Compiler.rakumod @@ -0,0 +1,72 @@ +#| Utilities for interacting with the idris compiler and package manager +unit module IUtils::Compiler; + +# Utility functions for pack + +#| Invoke a pack command +sub pack-run(*@cmd) is export { + my $proc = run "pack", @cmd, :out, :err; + my $out = $proc.out.slurp(:close); + my $err = $proc.err.slurp(:close); + unless $proc { + die qq:to/END/; + Pack Failure! + Captured Output: + $out + + Captured StdErr: + $err + END + } +} + +#| Build a package with pack +sub pack-build($pkg) is export { + pack-run 'build', $pkg +} + +#| Test a package with pack +sub pack-test($pkg) is export { + pack-run 'build', $pkg +} + +#| Clean a package with pack +sub pack-clean($pkg) is export { + 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 +sub idris-run(*@cmd) is export { + my $proc = run "idris2", @cmd, :out, :err; + my $out = $proc.out.slurp(:close); + my $err = $proc.err.slurp(:close); + unless $proc { + IdrisError.new( + out => $out, err => $err, + exit-code => $proc.exitcode, command => @cmd.Str) + .throw; + } + return $out; +} + +#| Exec the expression with the given name in the given file +sub idris-exec($expr, $file) is export { + idris-run '--find-ipkg', '--exec', $expr, $file +}