parseCliArgs function
Implementation
CliArgsResult parseCliArgs(List<String> args) {
final subcommand = args.isEmpty ? null : _cliSubcommands[args.first];
if (subcommand != null) {
return subcommand(args.sublist(1));
}
final values = _CliArgValues();
for (var i = 0; i < args.length; i++) {
final arg = args[i];
if (const {'--help', '-h'}.contains(arg)) return const CliArgsHelp();
if (arg == '--version') return CliArgsVersion(output: _prescanOutput(args));
if (_applyBooleanFlag(values, arg)) continue;
final flag = _valueFlags[arg];
if (flag != null) {
final (canonical, apply) = flag;
if (i + 1 >= args.length) {
throw CliArgsException('$canonical requires a value');
}
apply(values, args[i + 1]);
i++;
continue;
}
// Anything not flag-like is a positional prompt fragment; unknown
// `-...` arguments stay an error.
if (arg.startsWith('-')) {
throw CliArgsException('unknown argument: $arg');
}
values.positionals.add(arg);
}
return values.finish();
}