private void AddImplicitOptionsAndCheckForErrors()
{
foreach (var result in RootCommandResult.AllSymbolResults().ToArray())
{
if (result is CommandResult command)
{
foreach (var symbol in command.Command.Children)
{
if (symbol.Argument.HasDefaultValue &&
command.Children[symbol.Name] == null)
{
switch (symbol)
{
case IOption option:
command.AddImplicitOption(option);
break;
}
}
}
if (!command.IsArgumentLimitReached &&
command.Command.Argument.HasDefaultValue)
{
var defaultValue = command.Command.Argument.GetDefaultValue();
if (defaultValue is string stringArg)
{
command.TryTakeToken(new Token(stringArg, TokenType.Argument));
}
else
{
command.UseDefaultValue = true;
}
}
}
var error = result.Validate();
if (error != null)
{
_errors.Add(error);
}
}
if (CommandResult.Command is Command cmd &&
cmd.Handler == null &&
cmd.Children.OfType<ICommand>().Any())
{
_errors.Insert(0,
new ParseError(
CommandResult.ValidationMessages.RequiredCommandWasNotProvided(),
CommandResult));
}
}