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);
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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;
 }
Esempio n. 6
0
 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);
 }
Esempio n. 7
0
 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);
 }