internal static Token Token(this SymbolResult symbolResult) { return(symbolResult switch { CommandResult commandResult => commandResult.Token, OptionResult optionResult => optionResult.Token ?? CreateImplicitToken(optionResult.Option), _ => throw new ArgumentOutOfRangeException(nameof(symbolResult)) });
private static void PopulateDefaultValues( CommandResult parentCommandResult, ISymbol symbol) { var symbolResult = parentCommandResult.Children.ResultFor(symbol); if (symbolResult == null) { switch (symbol) { case Option option when option.Argument.HasDefaultValue: var optionResult = new OptionResult( option, option.CreateImplicitToken()); var token = new ImplicitToken( optionResult.GetDefaultValueFor(option.Argument), TokenType.Argument); optionResult.Children.Add( new ArgumentResult( option.Argument, token, optionResult)); parentCommandResult.Children.Add(optionResult); optionResult.AddToken(token); break; case Argument argument when argument.HasDefaultValue: var implicitToken = new ImplicitToken(argument.GetDefaultValue(), TokenType.Argument); var argumentResult = new ArgumentResult( argument, implicitToken, parentCommandResult); parentCommandResult.Children.Add(argumentResult); parentCommandResult.AddToken(implicitToken); break; } } if (symbolResult is OptionResult o && o.Option.Argument.Type == typeof(bool) && o.Children.Count == 0) { o.Children.Add( new ArgumentResult( o.Option.Argument, new ImplicitToken(true, TokenType.Argument), o)); } }
private void PopulateDefaultValues() { var commandResults = _innermostCommandResult .RecurseWhileNotNull(c => c.Parent as CommandResult); foreach (var commandResult in commandResults) { foreach (var symbol in commandResult.Command.Children) { var symbolResult = _rootCommandResult.FindResultFor(symbol); if (symbolResult == null) { switch (symbol) { case Option option when option.Argument.HasDefaultValue: var optionResult = new OptionResult( option, null, commandResult); var childArgumentResult = optionResult.GetOrCreateDefaultArgumentResult( option.Argument); optionResult.Children.Add(childArgumentResult); commandResult.Children.Add(optionResult); _rootCommandResult.AddToSymbolMap(optionResult); break; case Argument argument when argument.HasDefaultValue: var argumentResult = commandResult.GetOrCreateDefaultArgumentResult( argument); commandResult.Children.Add(argumentResult); _rootCommandResult.AddToSymbolMap(argumentResult); break; } } if (symbolResult is OptionResult o && o.Option.Argument.Type == typeof(bool) && o.Children.Count == 0) { o.Children.Add( new ArgumentResult( o.Option.Argument, o)); } } } }
internal static ArgumentConversionResult ConvertIfNeeded( this OptionResult optionResult, Type type) { if (optionResult is null) { throw new ArgumentNullException(nameof(optionResult)); } return(optionResult.ArgumentConversionResult .ConvertIfNeeded(optionResult, type)); }
protected override void VisitOptionNode(OptionNode optionNode) { if (_innermostCommandResult !.Children.ResultFor(optionNode.Option) is null) { var optionResult = new OptionResult( optionNode.Option, optionNode.Token, _innermostCommandResult ); _innermostCommandResult.Children.Add(optionResult); } }
private void ValidateOptionResult(OptionResult optionResult) { var argument = optionResult.Option.Argument; var arityFailure = ArgumentArity.Validate( optionResult, argument, argument.Arity.MinimumNumberOfValues, argument.Arity.MaximumNumberOfValues); if (arityFailure != null) { _errors.Add( new ParseError(arityFailure.ErrorMessage !, optionResult)); } if (optionResult.Option is Option option) { for (var i = 0; i < option.Validators.Count; i++) { var validate = option.Validators[i]; var message = validate(optionResult); if (!string.IsNullOrWhiteSpace(message)) { _errors.Add(new ParseError(message !, optionResult)); } } } for (var i = 0; i < optionResult.Children.Count; i++) { var result = optionResult.Children[i]; if (result is ArgumentResult argumentResult) { ValidateArgumentResult(argumentResult); } } }
private void ValidateOptionResult(OptionResult optionResult) { var argument = optionResult.Option.Argument; var arityFailure = ArgumentArity.Validate( optionResult, argument, argument.Arity.MinimumNumberOfValues, argument.Arity.MaximumNumberOfValues); if (arityFailure != null) { _errors.Add( new ParseError(arityFailure.ErrorMessage !, optionResult)); } if (optionResult.Option is Option option) { foreach (var validate in option.Validators) { var message = validate(optionResult); if (!string.IsNullOrWhiteSpace(message)) { _errors.Add(new ParseError(message !, optionResult)); } } } foreach (var argumentResult in optionResult .Children .OfType <ArgumentResult>()) { ValidateArgumentResult(argumentResult); } }
public static T GetValueOrDefault <T>(this OptionResult optionResult) => optionResult.ConvertIfNeeded(typeof(T)) .GetValueOrDefault <T>();
public static object?GetValueOrDefault(this OptionResult optionResult) => optionResult.GetValueOrDefault <object?>();
internal static ArgumentConversionResult ConvertIfNeeded( this OptionResult optionResult, Type type) => optionResult.ArgumentConversionResult .ConvertIfNeeded(optionResult, type);
private void PopulateDefaultValues() { var commandResults = _innermostCommandResult .RecurseWhileNotNull(c => c.Parent as CommandResult); foreach (var commandResult in commandResults) { foreach (var symbol in commandResult.Command.Children) { var symbolResult = _rootCommandResult.FindResultFor(symbol); if (symbolResult == null) { switch (symbol) { case Option option when option.Argument.HasDefaultValue: var optionResult = new OptionResult( option, option.CreateImplicitToken()); var token = new ImplicitToken( optionResult.GetDefaultValueFor(option.Argument), TokenType.Argument); optionResult.Children.Add( new ArgumentResult( option.Argument, token, optionResult)); commandResult.Children.Add(optionResult); optionResult.AddToken(token); _rootCommandResult.AddToSymbolMap(optionResult); break; case Argument argument when argument.HasDefaultValue: var implicitToken = new ImplicitToken(argument.GetDefaultValue(), TokenType.Argument); var argumentResult = new ArgumentResult( argument, implicitToken, commandResult); commandResult.Children.Add(argumentResult); commandResult.AddToken(implicitToken); _rootCommandResult.AddToSymbolMap(argumentResult); break; } } if (symbolResult is OptionResult o && o.Option.Argument.Type == typeof(bool) && o.Children.Count == 0) { o.Children.Add( new ArgumentResult( o.Option.Argument, new ImplicitToken(true, TokenType.Argument), o)); } } } }
protected override void VisitOptionResult(OptionResult optionResult) { OptionResults.Add(optionResult.Option, optionResult); }
public static object?GetValueOrDefault(this OptionResult optionResult) { return(optionResult.GetValueOrDefault <object?>()); }