private static Parameter findParameter(Command command, string arg, out Message message) { Parameter par; if (command.Parameters.TryGetParameter(arg, out par)) { message = Message.NoError; return(par); } else { message = UnknownArgumentMessage.FromParameters(command, arg); return(null); } }
private static Message parseArguments(Command command, ArgumentQueue arguments) { Message msg = Message.NoError; bool first = true; while (arguments.Count > 0) { if (RegexLookup.ParameterName.IsMatch(arguments.Peek)) { Parameter par = findParameter(command, arguments.Dequeue(), out msg); if (msg.IsError) { return(msg); } msg = handleParameter(command, par, arguments); if (msg.IsError) { return(msg); } } else if (arguments.Peek == "--") { arguments.Dequeue(); } else { if (command.Parameters.HasNoName) { arguments.Skip(); } else if (first && RegexLookup.SubcommandName.IsMatch(arguments.Peek)) { return(UnknownArgumentMessage.FromSubcommands(command, arguments.Dequeue())); } else { return(NoUnnamed(arguments.Dequeue())); } } first = false; } msg = command.Parameters.FirstOrDefault(x => !x.IsSet && x.RequirementType == RequirementType.Error)?.RequiredMessage ?? Message.NoError; if (msg.IsError) { return(msg); } foreach (var p in command.Parameters.Where(x => !x.IsSet && x.RequirementType == RequirementType.Prompt)) { p.Prompt(p.RequiredMessage.Content); } string[] nonameArgs = arguments.PopSkipped(); if (nonameArgs.Length > 0) { if (command.Parameters.HasNoName) { msg = command.Parameters.NoName.Handle(nonameArgs); if (msg.IsError) { return(msg); } } else { return(NoUnnamed(nonameArgs[0])); } } return(Message.NoError); }