/// <summary> /// Generate possible completions for the specified set of command-line /// tokens. /// </summary> /// <param name="argSet">Argument set definition.</param> /// <param name="tokens">The tokens.</param> /// <param name="indexOfTokenToComplete">Index of the token to complete. /// </param> /// <param name="options">Parsing options.</param> /// <param name="destObjectFactory">If non-null, provides a factory /// function that can be used to create an object suitable to being /// filled out by this parser instance.</param> /// <returns>The candidate completions for the specified token. /// </returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="argSet"/> /// or <paramref name="tokens"/> is null.</exception> internal static IEnumerable <string> GetCompletions(ArgumentSetDefinition argSet, IEnumerable <string> tokens, int indexOfTokenToComplete, CommandLineParserOptions options, Func <object> destObjectFactory) { if (argSet == null) { throw new ArgumentNullException(nameof(argSet)); } if (tokens == null) { throw new ArgumentNullException(nameof(tokens)); } var parser = new ArgumentSetParser(argSet, options ?? CommandLineParserOptions.Quiet()); return(parser.GetCompletions(tokens, indexOfTokenToComplete, destObjectFactory)); }
private void DisplayCommandHelp(Action <ColoredMultistring> outputHandler, IEnumerable <string> tokens) { if (outputHandler == null) { return; } var groupOptions = new CommandGroupOptions { ServiceConfigurer = _parserOptions.ServiceConfigurer }; var group = new CommandGroup <TCommandType>(groupOptions); var parser = new ArgumentSetParser(CreateArgSet(), _parserOptions.With().Quiet()); parser.ParseTokens(tokens, group); var info = CommandLineParser.GetUsageInfo( parser.ArgumentSet, _parserOptions.HelpOptions, group); outputHandler(info); }
/// <summary> /// Tries to parse the given string arguments into the provided instance of <typeparamref name="T"/>. /// </summary> /// <typeparam name="T">Type of the destination object.</typeparam> /// <param name="argSet">Definition of the argument set to be parsing.</param> /// <param name="arguments">The string arguments to parse.</param> /// <param name="options">Options describing how to parse.</param> /// <param name="destination">The object to parse into.</param> /// <returns>True on success; false otherwise.</returns> /// <exception cref="ArgumentNullException">Thrown when <paramref name="arguments"/> or /// <paramref name="destination" /> is null.</exception> internal static bool TryParse <T>(ArgumentSetDefinition argSet, IEnumerable <string> arguments, CommandLineParserOptions options, T destination) { if (options == null) { options = new CommandLineParserOptions(); } // // Buffer output to the reporter; suppress it if we find afterwards // that the user just wanted to see help information. // var reportedLines = new List <ColoredMultistring>(); var actualReporter = options.Reporter; options = options.DeepClone(); options.Reporter = s => reportedLines.Add(s); // // Parse! // var parser = new ArgumentSetParser(argSet, options); var parseResult = parser.ParseArgumentList(arguments, destination).IsReady; var parserArgSet = parser.ArgumentSet; // // See if the user requested help output; if so, then suppress any errors. // if ((destination is IArgumentSetWithHelp helpArgs) && helpArgs.Help && actualReporter != null) { actualReporter(GetUsageInfo(parserArgSet, options.HelpOptions, destination)); return(false); } // // Okay, now flush any reported output. // if (actualReporter != null) { foreach (var line in reportedLines) { actualReporter.Invoke(line); } } // // If we failed to parse and if the caller requested it, then display usage information. // if (!parseResult && options.DisplayUsageInfoOnError && actualReporter != null) { actualReporter(ColoredMultistring.FromString(Environment.NewLine)); actualReporter(GetUsageInfo(parserArgSet, options.HelpOptions, destination)); } return(parseResult); }