A arg parser inspired by minimalist
///|
test {
let result = parse(
["--verbose", "-o", "output.txt", "input.txt"],
flags=["verbose"],
options=["output", "o"],
)
// Access parsed arguments
assert_true(result.flags.get("verbose") is Some(true))
assert_true(result.options is { "o": "output.txt", .. })
assert_true(result.positional is ["input.txt"])
}///|
test {
// Define aliases: short flags map to long names
let aliases = { "v": "verbose", "o": "output", "I": "include", "q": "quiet" }
// Parse a complex command line with multiple features:
// - Combined short flags: -vq (verbose + quiet)
// - Option with value: -o output.txt (using alias)
// - Negatable flag: --no-color (explicitly set to false)
// - Collections: --include multiple times
// - Key-value syntax: --format=json
// - Positional arguments: input.txt
let result = parse(
[
"-vq", // Combined short flags
"-o", "output.txt", // Option with alias
"--no-color", // Negatable flag
"--include", "src", // Collection (first)
"-I", "lib", // Collection (second, using alias)
"--format=json", // Key-value syntax
"input.txt", // Positional argument
],
flags=["verbose", "quiet", "color"], // Define boolean flags
options=["output", "format"], // Define string options
collections=["include"], // Define repeated options
negatable=["color"], // Allow --no-color
aliases~, // Use the aliases map
)
// Access boolean flags
assert_true(
result.flags is { "verbose": true, "quiet": true, "color": false, .. },
)
// Access string options
assert_true(
result.options is { "output": "output.txt", "format": "json", .. },
)
// Access collections (multiple values)
debug_inspect(
result.collections.get("include"),
content="Some([\"src\", \"lib\"])",
)
// Access positional arguments
debug_inspect(result.positional, content="[\"input.txt\"]")
}///|
test {
// Error handling: option requires a value
let _ = parse(["--output"], options=["output"]) catch {
ParseError(msg) => {
debug_inspect(msg, content="\"Option --output requires a value\"")
return
}
}
fail("Should have raised an error")
}A arg parser inspired by minimalist