in lib/src/arg_parser.dart [274:321]
void _addOption(
String name,
String? abbr,
String? help,
String? valueHelp,
Iterable<String>? allowed,
Map<String, String>? allowedHelp,
defaultsTo,
Function? callback,
OptionType type,
{bool negatable = false,
bool? splitCommas,
bool mandatory = false,
bool hide = false,
List<String> aliases = const []}) {
var allNames = [name, ...aliases];
if (allNames.any((name) => findByNameOrAlias(name) != null)) {
throw ArgumentError('Duplicate option or alias "$name".');
}
// Make sure the abbreviation isn't too long or in use.
if (abbr != null) {
var existing = findByAbbreviation(abbr);
if (existing != null) {
throw ArgumentError(
'Abbreviation "$abbr" is already used by "${existing.name}".');
}
}
// Make sure the option is not mandatory with a default value.
if (mandatory && defaultsTo != null) {
throw ArgumentError(
'The option $name cannot be mandatory and have a default value.');
}
var option = newOption(name, abbr, help, valueHelp, allowed, allowedHelp,
defaultsTo, callback, type,
negatable: negatable,
splitCommas: splitCommas,
mandatory: mandatory,
hide: hide,
aliases: aliases);
_options[name] = option;
_optionsAndSeparators.add(option);
for (var alias in aliases) {
_aliases[alias] = name;
}
}