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); }
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++; }
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);