diff --git a/src/System.CommandLine.Tests/Help/HelpBuilderTests.cs b/src/System.CommandLine.Tests/Help/HelpBuilderTests.cs index 0ec484549f..dd8914f09a 100644 --- a/src/System.CommandLine.Tests/Help/HelpBuilderTests.cs +++ b/src/System.CommandLine.Tests/Help/HelpBuilderTests.cs @@ -932,7 +932,38 @@ public void Command_arguments_with_default_values_that_are_enumerable_display_pi _console.ToString().Should().Contain(expected); } + [Fact] + public void Command_shared_arguments_with_one_or_more_arity_are_displayed_as_being_required() + { + var arg = new Argument + { + Name = "shared-args", + Arity = ArgumentArity.OneOrMore + }; + + var inner = new Command("inner", "command help") + { + arg + }; + _ = new Command("outer", "command help") + { + inner, + arg + }; + _ = new Command("unused", "command help") + { + arg + }; + _helpBuilder.Write(inner, _console); + + var expected = + $"Usage:{NewLine}" + + $"{_indentation}outer ... inner ..."; + + _console.ToString().Should().Contain(expected); + } + #endregion Arguments #region Options diff --git a/src/System.CommandLine/Help/HelpBuilder.cs b/src/System.CommandLine/Help/HelpBuilder.cs index 4eb16a21ca..6b83e5019a 100644 --- a/src/System.CommandLine/Help/HelpBuilder.cs +++ b/src/System.CommandLine/Help/HelpBuilder.cs @@ -325,12 +325,8 @@ private string FormatArgumentUsage(IReadOnlyList arguments) { StringBuilderPool.Default.ReturnToPool(sb); } - - bool IsMultiParented(Argument a) => - a.FirstParent is not null && a.FirstParent.Next is not null; - + bool IsOptional(Argument argument) => - IsMultiParented(argument) || argument.Arity.MinimumNumberOfValues == 0; }