diff --git a/CliFx.Tests/HelpTextSpecs.cs b/CliFx.Tests/HelpTextSpecs.cs index 722eabe..e254a7d 100644 --- a/CliFx.Tests/HelpTextSpecs.cs +++ b/CliFx.Tests/HelpTextSpecs.cs @@ -65,7 +65,7 @@ namespace CliFx.Tests } [Fact] - public async Task Help_text_shows_usage_format_which_lists_available_sub_commands() + public async Task Help_text_shows_commands_list_with_description_and_usage_info() { // Arrange var (console, stdOut, _) = VirtualConsole.CreateBuffered(); @@ -78,14 +78,16 @@ namespace CliFx.Tests .Build(); // Act - var exitCode = await application.RunAsync(new[] {"--help"}); + var exitCode = await application.RunAsync(new[] { "--help" }); // Assert exitCode.Should().Be(0); stdOut.GetString().Should().ContainAll( - "Usage", - "... named", - "... named sub" + "Commands", + "Named command description", + "named [options]", + "Named sub command description", + "named sub [options]" ); _output.WriteLine(stdOut.GetString()); diff --git a/CliFx/Domain/HelpTextWriter.cs b/CliFx/Domain/HelpTextWriter.cs index b7528c6..deb0808 100644 --- a/CliFx/Domain/HelpTextWriter.cs +++ b/CliFx/Domain/HelpTextWriter.cs @@ -169,19 +169,6 @@ namespace CliFx.Domain // Current command usage WriteCommandUsageLineItem(command, childCommands.Any()); - - // Sub commands usage - if (childCommands.Any()) - { - WriteVerticalMargin(); - - foreach (var childCommand in childCommands) - { - WriteHorizontalMargin(); - Write("... "); - WriteCommandUsageLineItem(childCommand, false); - } - } } private void WriteCommandParameters(CommandSchema command) @@ -298,9 +285,9 @@ namespace CliFx.Domain private void WriteCommandChildren( CommandSchema command, - IReadOnlyList childCommands) + IReadOnlyList descendantCommands) { - if (!childCommands.Any()) + if (!descendantCommands.Any()) return; if (!IsEmpty) @@ -308,28 +295,29 @@ namespace CliFx.Domain WriteHeader("Commands"); - foreach (var childCommand in childCommands) + foreach (var descendantCommand in descendantCommands) { var relativeCommandName = !string.IsNullOrWhiteSpace(command.Name) - ? childCommand.Name!.Substring(command.Name.Length).Trim() - : childCommand.Name!; - - // Name - WriteHorizontalMargin(); - Write(ConsoleColor.Cyan, relativeCommandName); + ? descendantCommand.Name!.Substring(command.Name.Length).Trim() + : descendantCommand.Name!; // Description - if (!string.IsNullOrWhiteSpace(childCommand.Description)) + + if (!string.IsNullOrWhiteSpace(descendantCommand.Description)) { - WriteColumnMargin(); - Write(childCommand.Description); + WriteHorizontalMargin(); + Write(descendantCommand.Description); + WriteVerticalMargin(); } + // Name + WriteHorizontalMargin(4); + WriteCommandUsageLineItem(descendantCommand, false); + WriteLine(); } // Child command help tip - WriteVerticalMargin(); Write("You can run `"); Write(_metadata.ExecutableName); @@ -356,7 +344,6 @@ namespace CliFx.Domain IReadOnlyDictionary defaultValues) { var commandName = command.Name; - var childCommands = root.GetChildCommands(commandName); var descendantCommands = root.GetDescendantCommands(commandName); _console.ResetColor(); @@ -368,7 +355,7 @@ namespace CliFx.Domain WriteCommandUsage(command, descendantCommands); WriteCommandParameters(command); WriteCommandOptions(command, defaultValues); - WriteCommandChildren(command, childCommands); + WriteCommandChildren(command, descendantCommands); } }