parseCliArgs function

CliArgsResult parseCliArgs(
  1. List<String> args
)

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();
}