Skip to content

Commit 080372b

Browse files
authored
Hide flag inversion when help is hidden (#289)
Fixes an issue where the inversion of a flag would not be hidden whe the ArgumentHelp shouldDisplay value is false. Added a unit test to check for this behavior.
1 parent 831ed5e commit 080372b

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

Sources/ArgumentParser/Parsing/ArgumentSet.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,20 @@ extension ArgumentSet {
100100
// The flag is required if initialValue is `nil`, otherwise it's optional
101101
let helpOptions: ArgumentDefinition.Help.Options = initialValue != nil ? .isOptional : []
102102

103-
let help = ArgumentDefinition.Help(options: helpOptions, help: help, defaultValue: initialValue.map(String.init), key: key, isComposite: true)
103+
let enableHelp = ArgumentDefinition.Help(options: helpOptions, help: help, defaultValue: initialValue.map(String.init), key: key, isComposite: true)
104+
let disableHelp = ArgumentDefinition.Help(options: [.isOptional], help: help, key: key)
105+
104106
let (enableNames, disableNames) = inversion.enableDisableNamePair(for: key, name: name)
105107

106108
var hasUpdated = false
107-
let enableArg = ArgumentDefinition(kind: .named(enableNames),help: help, completion: .default, update: .nullary({ (origin, name, values) in
109+
let enableArg = ArgumentDefinition(kind: .named(enableNames), help: enableHelp, completion: .default, update: .nullary({ (origin, name, values) in
108110
hasUpdated = try ArgumentSet.updateFlag(key: key, value: true, origin: origin, values: &values, hasUpdated: hasUpdated, exclusivity: exclusivity)
109111
}), initial: { origin, values in
110112
if let initialValue = initialValue {
111113
values.set(initialValue, forKey: key, inputOrigin: origin)
112114
}
113115
})
114-
let disableArg = ArgumentDefinition(kind: .named(disableNames), help: ArgumentDefinition.Help(options: [.isOptional], key: key), completion: .default, update: .nullary({ (origin, name, values) in
116+
let disableArg = ArgumentDefinition(kind: .named(disableNames), help: disableHelp, completion: .default, update: .nullary({ (origin, name, values) in
115117
hasUpdated = try ArgumentSet.updateFlag(key: key, value: false, origin: origin, values: &values, hasUpdated: hasUpdated, exclusivity: exclusivity)
116118
}), initial: { _, _ in })
117119
return ArgumentSet([enableArg, disableArg])

Tests/ArgumentParserUnitTests/HelpGenerationTests.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ extension HelpGenerationTests {
5858
@Argument(help: .hidden) var hiddenName: String?
5959
@Option(help: .hidden) var hiddenTitle: String?
6060
@Flag(help: .hidden) var hiddenFlag: Bool = false
61+
@Flag(inversion: .prefixedNo, help: .hidden) var hiddenInvertedFlag: Bool = true
6162
}
6263

6364
func testHelpWithHidden() {

0 commit comments

Comments
 (0)