Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,28 @@ extension ArgumentVisibility {
internal func isAtLeastAsVisible(as other: Self) -> Bool {
self.base._comparableLevel >= other.base._comparableLevel
}

/// Reduce the visibility to a specified level if it is more restricted than the current value.
internal mutating func reduce(to: ArgumentVisibility) {
switch to.base {
case .default:
break // No effect
case .hidden:
if case .default = self.base {
self.base = .hidden
}
case .private:
self.base = .private
}
}
}

extension ArgumentDefinition {
internal func reducingHelpVisibility(to visibility: ArgumentVisibility)
-> Self
{
var result = self
result.help.visibility.reduce(to: visibility)
return result
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,9 @@ public struct OptionGroup<Value: ParsableArguments>: Decodable, ParsedWrapper {
$0.help.parentTitle = title
}
}
args.content = args.content.map { arg in
arg.reducingHelpVisibility(to: visibility)
}
return args
})
self._visibility = visibility
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -301,9 +301,6 @@ extension ArgumentSet {
guard let codingKey = child.label else { return nil }

if let parsed = child.value as? ArgumentSetProvider {
guard parsed._visibility.isAtLeastAsVisible(as: visibility)
else { return nil }

let key = InputKey(name: codingKey, parent: parent)
return parsed.argumentSet(for: key)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,18 +187,23 @@ extension HelpGenerationTests {
""")
}

fileprivate struct NestedGroups: ParsableArguments {
@OptionGroup(visibility: .hidden)
var flagsAndOptions: FlagsAndOptions

@OptionGroup(visibility: .private)
var argsAndFlags: ArgsAndFlags
}

fileprivate struct HiddenGroups: ParsableCommand {
@OptionGroup(title: "Flags Group", visibility: .hidden)
var flags: Flags

@OptionGroup(title: "Options Group", visibility: .hidden)
var options: Options

@OptionGroup(visibility: .hidden)
var flagsAndOptions: FlagsAndOptions

@OptionGroup(visibility: .private)
var argsAndFlags: ArgsAndFlags
@OptionGroup()
var nested: NestedGroups
}

func testHiddenGroups() {
Expand Down
Loading