diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-26 19:47:05 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-26 19:50:54 +0100 |
| commit | ba5f68aa1f6e909dad92dac0fdbf6cf808fbfe76 (patch) | |
| tree | 065bfdcd41e8bc6ad9aba3ec4ed7adb8b4c3916b /src | |
| parent | 5c0b6c30c84067dcc36dbdc9d8e4075e94490131 (diff) | |
Add CLI
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java new file mode 100644 index 0000000..a4992e4 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCli.java @@ -0,0 +1,62 @@ +package org.zwobble.hobgoblin.compiler; + +import net.sourceforge.argparse4j.ArgumentParsers; +import net.sourceforge.argparse4j.ext.java7.PathArgumentType; +import net.sourceforge.argparse4j.inf.ArgumentParserException; +import net.sourceforge.argparse4j.inf.Namespace; +import org.zwobble.hobgoblin.compiler.errors.SourceError; +import org.zwobble.hobgoblin.compiler.sources.NullSource; + +import java.io.IOException; +import java.nio.file.Path; + +public class HobgoblinCli { + public static void main(String[] rawArgs) throws IOException, InterruptedException { + var args = parseArgs(rawArgs); + try { + compile(args); + } catch (SourceError error) { + if (!(error.source() instanceof NullSource)) { + System.err.println(error.source().describe()); + } + System.err.println(error.getMessage()); + System.exit(2); + } + } + + private static void compile(Namespace args) throws IOException, InterruptedException { + var sourcePath = args.<Path>get("source"); + + switch (args.<Command>get("command")) { + case COMPILE -> { + HobgoblinCompiler.compile(sourcePath); + } + } + } + + private static Namespace parseArgs(String[] args) { + var parser = ArgumentParsers.newFor("hobgoblin").build() + .defaultHelp(true); + + var subparsers = parser.addSubparsers(); + + var compileSubParser = subparsers.addParser("compile"); + compileSubParser.setDefault("command", Command.COMPILE); + compileSubParser + .addArgument("source") + .type(new PathArgumentType()) + .required(true); + + try { + return parser.parseArgs(args); + } catch (ArgumentParserException e) { + parser.handleError(e); + System.exit(1); + throw new RuntimeException(e); + } + } + + private enum Command { + COMPILE, + } +} |
