private int?HandleHelpOption(CommandInput commandInput, IReadOnlyList <CommandSchema> availableCommandSchemas, CommandSchema targetCommandSchema) { // Help should be rendered if it was requested, or when executing a command which isn't defined var shouldRenderHelp = commandInput.IsHelpOptionSpecified() || targetCommandSchema == null; // If shouldn't render help, pass execution to the next handler if (!shouldRenderHelp) { return(null); } // Keep track whether there was an error in the input var isError = false; // If target command isn't defined, find its contextual replacement if (targetCommandSchema == null) { // If command was specified, inform the user that it's not defined if (commandInput.IsCommandSpecified()) { _console.WithForegroundColor(ConsoleColor.Red, () => _console.Error.WriteLine($"Specified command [{commandInput.CommandName}] is not defined.")); isError = true; } // Replace target command with closest parent of specified command targetCommandSchema = availableCommandSchemas.FindParent(commandInput.CommandName); // If there's no parent, replace with stub default command if (targetCommandSchema == null) { targetCommandSchema = CommandSchema.StubDefaultCommand; availableCommandSchemas = availableCommandSchemas.Concat(CommandSchema.StubDefaultCommand).ToArray(); } } // Build help text source var helpTextSource = new HelpTextSource(_metadata, availableCommandSchemas, targetCommandSchema); // Render help text _helpTextRenderer.RenderHelpText(_console, helpTextSource); // Short-circuit with appropriate exit code return(isError ? -1 : 0); }
private int?HandleHelpOption(CommandInput commandInput, IReadOnlyList <CommandSchema> availableCommandSchemas, CommandCandidate?commandCandidate) { // Help should be rendered if it was requested, or when executing a command which isn't defined var shouldRenderHelp = commandInput.IsHelpOptionSpecified() || commandCandidate == null; // If shouldn't render help, pass execution to the next handler if (!shouldRenderHelp) { return(null); } // Keep track whether there was an error in the input var isError = false; // Report error if no command matched the arguments if (commandCandidate is null) { // If a command was specified, inform the user that the command is not defined if (commandInput.HasArguments()) { _console.WithForegroundColor(ConsoleColor.Red, () => _console.Error.WriteLine($"No command could be matched for input [{string.Join(" ", commandInput.Arguments)}]")); isError = true; } commandCandidate = new CommandCandidate(CommandSchema.StubDefaultCommand, new string[0], commandInput); } // Build help text source var helpTextSource = new HelpTextSource(_metadata, availableCommandSchemas, commandCandidate.Schema); // Render help text _helpTextRenderer.RenderHelpText(_console, helpTextSource); // Short-circuit with appropriate exit code return(isError ? -1 : 0); }