예제 #1
0
        public (bool isMatch, CommandLineArgumentList remainingArguments) MatchesVerbSequence(
            CommandLineArgumentList commandLineArguments)
        {
            var argsMatched = new List <CommandLineArgument>();

            using (var verbEnumerator = GetEnumerator())
                using (var inputArgumentEnumerator = commandLineArguments.GetEnumerator())
                {
                    while (verbEnumerator.MoveNext())
                    {
                        if (inputArgumentEnumerator.MoveNext() &&
                            inputArgumentEnumerator.Current is CommandLineArgument.Free free &&
                            verbEnumerator.Current.Matches(free.Value))
                        {
                            argsMatched.Add(free);
                        }
예제 #2
0
        public int GetPartialMatchAccuracy(CommandLineArgumentList commandLineArgs)
        {
            var bestAccuracy = 0;

            foreach (var route in _routes)
            {
                using (var verbEnumerator = route.GetEnumerator())
                    using (var inputArgumentEnumerator = commandLineArgs.GetEnumerator())
                    {
                        var currentAccuracy = 0;

                        while (verbEnumerator.MoveNext())
                        {
                            if (inputArgumentEnumerator.MoveNext() &&
                                inputArgumentEnumerator.Current is CommandLineArgument.Free free &&
                                verbEnumerator.Current.Matches(free.Value))
                            {
                                currentAccuracy++;
                            }
예제 #3
0
        public Option <(ParameterMapping, CommandLineArgumentList remainingArguments)> NamedPass(
            ParameterModel parameterModel,
            CommandLineArgumentList args)
        {
            var argumentsMatched = new List <CommandLineArgument>();
            var suppliedValues   = new List <string>();

            using (var enumerator = args.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    switch (enumerator.Current)
                    {
                    case CommandLineArgument.NameValuePair nvPair
                        when parameterModel.MatchesName(nvPair.Name):

                        argumentsMatched.Add(nvPair);

                        if (parameterModel.AllowMultipleValues)
                        {
                            suppliedValues.Add(nvPair.Value);
                            continue;
                        }

                        return(
                            new ParameterMapping.NamedValue(parameterModel, ListOf(nvPair.Value)),
                            args.Without(argumentsMatched));

                    case CommandLineArgument.BareNameOrFlag nameOrFlag
                        when parameterModel.MatchesName(nameOrFlag.Name) && parameterModel.IsFlag:
                        argumentsMatched.Add(nameOrFlag);

                        return(
                            new ParameterMapping.Flag(parameterModel),
                            args.Without(argumentsMatched));

                    case CommandLineArgument.BareNameOrFlag bnf
                        when parameterModel.MatchesName(bnf.Name):
                        if (enumerator.MoveNext())
                        {
                            if (enumerator.Current is CommandLineArgument.Free free)
                            {
                                argumentsMatched.Add(bnf);
                                argumentsMatched.Add(free);

                                if (parameterModel.AllowMultipleValues)
                                {
                                    suppliedValues.Add(free.Value);
                                    continue;
                                }

                                return(
                                    new ParameterMapping.NamedValue(
                                        parameterModel,
                                        ListOf(free.Value)),
                                    args.Without(argumentsMatched));
                            }
                        }

                        break;

                    default:
                        break;
                    }
                }
            }

            if (parameterModel.AllowMultipleValues && suppliedValues.Any())
            {
                return(
                    new ParameterMapping.NamedValue(parameterModel, suppliedValues),
                    args.Without(argumentsMatched));
            }

            return(default);