From e70beb03229ed442633b955052ef38f2a90fa2f5 Mon Sep 17 00:00:00 2001 From: Tiago Lopes Date: Sat, 11 Oct 2025 12:42:10 -0300 Subject: [PATCH] Suppress builtin -h,--help when command uses -h Fixes part of the behavior described in issue 778 (https://github.com/apple/swift-argument-parser/issues/778). --- .../ArgumentParser/Usage/HelpGenerator.swift | 14 ++++++++++- .../HelpGenerationTests.swift | 25 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Sources/ArgumentParser/Usage/HelpGenerator.swift b/Sources/ArgumentParser/Usage/HelpGenerator.swift index 4fc313042..0deb7ae85 100644 --- a/Sources/ArgumentParser/Usage/HelpGenerator.swift +++ b/Sources/ArgumentParser/Usage/HelpGenerator.swift @@ -519,7 +519,19 @@ extension BidirectionalCollection where Element == ParsableCommand.Type { }) else { return ArgumentSet() } self.versionArgumentDefinition().map { arguments.append($0) } - self.helpArgumentDefinition().map { arguments.append($0) } + + let shouldAppendBuiltinHelp = !arguments + .flatMap(\.names) + .contains { name in + if case .short(let char, _) = name { + return char == "h" + } + return false + } + + if shouldAppendBuiltinHelp { + self.helpArgumentDefinition().map { arguments.append($0) } + } // To add when 'dump-help' is public API: // arguments.append(self.dumpHelpArgumentDefinition()) diff --git a/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift b/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift index cc3973c71..3df0dbc7d 100644 --- a/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift +++ b/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift @@ -1493,3 +1493,28 @@ extension HelpGenerationTests { #endif } } + +extension HelpGenerationTests { + struct Issue778: ParsableCommand { + @Argument(help: "The phrase to repeat.") + var phrase: String + + @Option(name: .shortAndLong, help: "The name of the talking horse.") + var horse: String + } + + func testCommandWithShortOptionNameHDoesNotIncludeBuiltInHelp() { + AssertHelp( + .default, for: Issue778.self, columns: nil, + equals: """ + USAGE: issue778 --horse + + ARGUMENTS: + The phrase to repeat. + + OPTIONS: + -h, --horse The name of the talking horse. + + """) + } +}