public CommandLineParser(IUserInterface userInterface, ICommandManager commandManager, IDynamicVerbFactory dynamicVerbFactory, ExecutionContext executionContext, ILifetimeScope lifetimeScope) { this.userInterface = userInterface; this.commandManager = commandManager; this.dynamicVerbFactory = dynamicVerbFactory; this.executionContext = executionContext; this.lifetimeScope = lifetimeScope; }
private static ParserResult <object> ParseVerbs(Parser parser, string[] argsArray, IDynamicVerbFactory dynamicVerbFactory, Type[] types, List <string> path) { if (parser == null) { throw new ArgumentNullException(nameof(parser)); } if (argsArray.Length == 0 || argsArray[0].StartsWith("-", StringComparison.Ordinal)) { return(parser.ParseArguments(argsArray, types)); } var verb = argsArray[0]; foreach (var type in types) { var verbAttribute = type.GetCustomAttribute <VerbAttribute>(); if (verbAttribute == null || verbAttribute.Name != verb) { continue; } path.Add(verb); var subVerbsAttribute = type.GetCustomAttribute <ChildVerbsAttribute>(); Type[] subTypes = subVerbsAttribute?.Types ?? Array.Empty <Type>(); subTypes = subTypes.Concat(dynamicVerbFactory.GetDynamicVerbs(path)).ToArray(); if (subTypes.Any() && type.GetCustomAttribute <UseChildVerbsAsCategoryAttribute>() == null) { return(ParseVerbs(parser, argsArray.Skip(1).ToArray(), dynamicVerbFactory, subTypes, path)); } break; } return(parser.ParseArguments(argsArray, types)); }
public static ParserResult <object> ParseVerbs(this Parser parser, IEnumerable <string> args, IDynamicVerbFactory dynamicVerbFactory, params Type[] types) { string[] argsArray = ModifyArgs(); return(ParseVerbs(parser, argsArray, dynamicVerbFactory, types.Concat(dynamicVerbFactory.GetDynamicVerbs(Array.Empty <string>())).ToArray(), new List <string>())); string[] ModifyArgs() { string[] result = args.ToArray(); if (result.Length > 1) { for (int i = 0; i < result.Length; i++) { if (result[i] == "--version") { result[i] = "-v"; } } } return(result); } }