public UsagePrinter(CommandLineParserOptions parserOptions, ICommandLineCommandContainer container, IUsageBuilder builder) { m_parserOptions = parserOptions; m_commandContainer = container; m_usageBuilder = builder; }
/// <summary> /// Creates a new CLI output usage printer /// </summary> /// <param name="console"></param> /// <param name="container"></param> /// <param name="builder"></param> /// <param name="environmentVariablesService"></param> /// <param name="suggestionProvider"></param> public UsagePrinter(IConsole console, ICommandLineCommandContainer container, IUsageBuilder builder, IEnvironmentVariablesService environmentVariablesService, ISuggestionProvider suggestionProvider) { this.console = console ?? throw new ArgumentNullException(nameof(console)); Container = container ?? throw new ArgumentNullException(nameof(container)); Builder = builder ?? throw new ArgumentNullException(nameof(builder)); this.environmentVariablesService = environmentVariablesService ?? throw new ArgumentNullException(nameof(environmentVariablesService)); this.suggestionProvider = suggestionProvider ?? throw new ArgumentNullException(nameof(suggestionProvider)); }
public IEnumerable <string> GetSuggestions(string input, ICommandLineCommandContainer command) { if (command is null) { return(Array.Empty <string>()); } var suggestions = GetAvailableSuggestions(command); return(GetBestMatchesOrdered(suggestions, input)); }
public ProcessingContext(ProcessingContext parent, ICommandLineCommandContainer commandContainer, ILogger logger) { this.logger = logger; parent?.AssertSafeToSwitchProcessingContext(); ProcessingOrderedOptions = false; Parent = parent; CurrentCommand = commandContainer; orderedOptions = new List <ICommandLineOption>(CurrentCommand.Options.Where(o => o.Order.HasValue)); HasOrderedOptions = orderedOptions.Count > 0; }
private IEnumerable <string> GetAvailableSuggestions(ICommandLineCommandContainer commandContext) { foreach (var cmd in commandContext.Commands) { yield return(cmd.Name); } foreach (var option in commandContext.Options) { if (option.HasShortName) { yield return(option.ShortName); } if (option.HasLongName) { yield return(option.LongName); } } }
/// <inheritdoc/> public void Process(IReadOnlyList <string> arguments, IList <Exception> errors, ICommandLineCommandContainer commandContainer) { results.Clear(); unusedArguments.Clear(); enumerator = new ArgumentRecordEnumerator(options, arguments); CurrentContext = new ProcessingContext(null, commandContainer, logger); try { while (enumerator.MoveNext()) { var processed = ProcessNext(); if (!processed) { AddUnusedArgument(enumerator.Current); } } } catch (InvalidOperationException invalidOpException) { logger.LogError(invalidOpException, "Error occured while processing the argument list"); errors.Add(invalidOpException); } finally { enumerator?.Dispose(); CurrentContext = null; } }