Exemple #1
0
 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;
 }
Exemple #2
0
        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));
        }
Exemple #3
0
        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);
            }
        }