Arguments.parse constructor
Arguments.parse(})
Parses args
.
flags
the flags keys.abbreviations
the keys abbreviations.caseSensitive
iffalse
, keys aretoLowerCase
.
Implementation
factory Arguments.parse(
List<String> args, {
Set<String>? flags,
Map<String, String>? abbreviations,
bool caseSensitive = false,
}) {
abbreviations ??= <String, String>{};
var parsedParams = <String, dynamic>{};
var parsedFlags = <String>{};
for (var i = 0; i < args.length;) {
var key = args[i];
String? name;
var flagName = false;
if (key.startsWith('-')) {
var match = _namedParameter.firstMatch(key);
if (match != null) {
name = match.group(1)!;
if (!caseSensitive) {
name = name.toLowerCase();
}
if (!key.startsWith('--')) {
var name2 = abbreviations[name];
if (name2 != null) {
name = name2;
} else if (i < args.length - 1) {
var next = args[i + 1];
var nextKey = _namedParameter.hasMatch(next);
flagName = nextKey;
} else {
flagName = true;
}
}
}
}
if (name != null) {
if (flags != null && flags.contains(name)) {
args.removeAt(i);
parsedFlags.add(name);
} else if (flagName) {
args.removeAt(i);
parsedFlags.add(name);
} else if (i < args.length - 1) {
var val = args.removeAt(i + 1);
args.removeAt(i);
_addToMap(parsedParams, name, val);
} else {
throw StateError('Should be a flag');
}
} else {
++i;
}
}
return Arguments(args,
parameters: parsedParams,
flags: parsedFlags,
abbreviations: abbreviations);
}