private void RegisterOptionDefinition(OptionDefinition optionDefinition) { _registeredOptions.Add(optionDefinition); foreach (char shortName in optionDefinition.ShortNames) { // TODO We are adding options to the same database and long option has no limit on name size (could have length = 1), this could // cause problems. RegisterOptionName(shortName.ToString(), optionDefinition); } foreach (string longName in optionDefinition.LongNames) { RegisterOptionName(longName, optionDefinition); } }
internal void AddParsedOption(OptionParsed option) { OptionDefinition definition = _optionDefinitions.GetOptionDefinition(option.Name); if (definition == null) { throw new ArgumentException("OptionDefinition with provided name does not exist in OptionStorage"); } if (_pairedOptions.ContainsKey(definition)) { _errors.Add(new ParseError(ParseErrorKind.DuplicitOption, option.Name, option.Value)); return; } _pairedOptions.Add(definition, option); _parsedOptions.Add(option); }
/// <summary> /// Gets parsed option from the command line for the provided option definition. /// </summary> /// <param name="optionDefinition">an option definition for which parsed option should be retrieved</param> /// <returns>parsed option if option was defined in the provided command line; otherwise returns null</returns> public OptionParsed GetParsedOption(OptionDefinition optionDefinition) { if (optionDefinition == null) { return(null); } // Checks if the provided option definition is owned by current _optionDefinitions. if (optionDefinition.OwnerDb != _optionDefinitions) { return(null); } if (!_pairedOptions.ContainsKey(optionDefinition)) { return(null); } return(_pairedOptions[optionDefinition]); // Returns only sucessfully parsed options - rest stays in error list }
/// <inheritdoc/> public OptionDefinition Build() { if (_argumentPresence != ArgumentPresence.None && _valueValidator == null) { throw new ValueParserNullException($"Cannot build an {nameof(OptionDefinition)} with {nameof(ArgumentPresence)} other than {nameof(ArgumentPresence.None)} and empty {nameof(IValueParser)}."); } if (_shortNames.Count == 0 && _longNames.Count == 0) { throw new OptionNameMissingException($"Cannot build an {nameof(OptionDefinition)} with no long or short names defined."); } OptionDefinition optionDefinition = new OptionDefinition(this); _optionOwner.RegisterOption(optionDefinition); _isSealed = true; return(optionDefinition); }
/// <summary> /// Registers the provided option within the database. /// </summary> /// <param name="optionName">an option name to be registered</param> /// <param name="optionDefinition">an instance of the OptionDefinion type that describes the provided option name</param> private void RegisterOptionName(string optionName, OptionDefinition optionDefinition) { _optionDefinitions[optionName] = optionDefinition; }
private static bool TryLogMandatoryArgumentMissing(string argument, string optionName, bool isShort, OptionDefinition optionDef) { if (argument == null && optionDef.ArgumentPresence == ArgumentPresence.Mandatory) { AddError(ParseErrorKind.MandatoryArgumentMissing, new OptionParsed(optionName, argument, isShort, optionDef.ValueParser)); return(true); } return(false); }
private static bool TryLogOptionDoesNotTakeAnArgument(string argument, string optionName, OptionDefinition optionDef, bool isShort) { if (argument != null && optionDef.ArgumentPresence == ArgumentPresence.None) { AddError(ParseErrorKind.OptionDoesNotTakeAnArgument, new OptionParsed(optionName, argument, isShort, optionDef.ValueParser)); return(true); } return(false); }