Esempio n. 1
0
        internal static bool TryGetValueForOption(
            this CommandResult commandResult,
            IValueDescriptor valueDescriptor,
            out object?value)
        {
            var children = commandResult
                           .Children
                           .Where(o => valueDescriptor.ValueName?.IsMatch(o.Symbol) == true)
                           .ToArray();

            SymbolResult?symbolResult = null;

            if (children.Length > 1)
            {
                throw new ArgumentException(
                          $"Ambiguous match while trying to bind parameter {valueDescriptor.ValueName} among: {string.Join(",", children.Select(o => o.Symbol.Name))}");
            }

            if (children.Length == 1)
            {
                symbolResult = children[0];
            }

            if (symbolResult is OptionResult optionResult)
            {
                if (optionResult.ConvertIfNeeded(valueDescriptor.ValueType) is SuccessfulArgumentConversionResult successful)
                {
                    value = successful.Value;
                    return(true);
                }
            }

            value = null;
            return(false);
        }
Esempio n. 2
0
        private protected SymbolResult(
            ISymbol symbol,
            SymbolResult?parent)
        {
            Symbol = symbol ?? throw new ArgumentNullException(nameof(symbol));

            Parent = parent;
        }
Esempio n. 3
0
        internal ParseError(string message, SymbolResult?symbolResult = null)
        {
            if (string.IsNullOrWhiteSpace(message))
            {
                throw new ArgumentException("Value cannot be null or whitespace.", nameof(message));
            }

            Message      = message;
            SymbolResult = symbolResult;
        }
Esempio n. 4
0
        private static SymbolResult GetSymbolResult <T>(Argument <T> argumeent, ParseResult parseResult, CommandResult?commmandResult)
        {
            SymbolResult?symbolResult = null;

            while (!(commmandResult is null) && symbolResult is null)
            {
                symbolResult   = parseResult.RootCommandResult.FindResultFor(argumeent);
                commmandResult = commmandResult.Parent as CommandResult;
            }

            return(symbolResult);
        }
Esempio n. 5
0
        private static SymbolResult GetSymbolResult <T>(Option <T> option, ParseResult parseResult, CommandResult?commmandResult)
        {
            SymbolResult?symbolResult = null;

            while (!(commmandResult is null) && symbolResult is null)
            {
                symbolResult   = parseResult.RootCommandResult.FindResultFor(option);
                commmandResult = commmandResult.Parent as CommandResult;
            }

            return(symbolResult);
        }
        internal static FailedArgumentConversionArityResult?Validate(
            SymbolResult?symbolResult,
            IArgument argument,
            int minimumNumberOfValues,
            int maximumNumberOfValues)
        {
            var argumentResult = symbolResult switch
            {
                CommandResult commandResult => commandResult.Root?.FindResultFor(argument),
                OptionResult optionResult => optionResult.Children.ResultFor(argument),
                _ => symbolResult
            };

            var tokenCount = argumentResult?.Tokens.Count ?? 0;

            if (tokenCount < minimumNumberOfValues)
            {
                if (symbolResult !.UseDefaultValueFor(argument))
                {
                    return(null);
                }

                return(new MissingArgumentConversionResult(
                           argument,
                           symbolResult.ValidationMessages.RequiredArgumentMissing(symbolResult)));
            }

            if (tokenCount > maximumNumberOfValues)
            {
                return(new TooManyArgumentsConversionResult(
                           argument,
                           symbolResult !.ValidationMessages.ExpectsOneArgument(symbolResult)));
            }

            return(null);
        }
 internal ArgumentResult(
     IArgument argument,
     SymbolResult?parent) : base(argument, parent)
 {
     Argument = argument;
 }