File tree Expand file tree Collapse file tree 4 files changed +49
-2
lines changed
Tests/ArgumentParserUnitTests Expand file tree Collapse file tree 4 files changed +49
-2
lines changed Original file line number Diff line number Diff line change 31
31
@propertyWrapper
32
32
public struct OptionGroup < Value: ParsableArguments > : Decodable , ParsedWrapper {
33
33
internal var _parsedValue : Parsed < Value >
34
+ internal var _hidden : Bool ?
34
35
35
36
internal init ( _parsedValue: Parsed < Value > ) {
36
37
self . _parsedValue = _parsedValue
@@ -84,7 +85,17 @@ extension OptionGroup: CustomStringConvertible {
84
85
case . value( let v) :
85
86
return String ( describing: v)
86
87
case . definition:
88
+ if let hidden = _hidden {
89
+ return " OptionGroup(*definition*) _hidden: \( hidden) "
90
+ }
87
91
return " OptionGroup(*definition*) "
88
92
}
89
93
}
90
94
}
95
+
96
+ extension OptionGroup {
97
+ public init ( _hidden: Bool ) {
98
+ self . init ( )
99
+ self . _hidden = _hidden
100
+ }
101
+ }
Original file line number Diff line number Diff line change @@ -232,7 +232,7 @@ protocol ArgumentSetProvider {
232
232
}
233
233
234
234
extension ArgumentSet {
235
- init ( _ type: ParsableArguments . Type ) {
235
+ init ( _ type: ParsableArguments . Type , creatingHelp : Bool = false ) {
236
236
237
237
#if DEBUG
238
238
do {
@@ -247,6 +247,10 @@ extension ArgumentSet {
247
247
. compactMap { child in
248
248
guard var codingKey = child. label else { return nil }
249
249
250
+ if creatingHelp {
251
+ guard !String( describing: child. value) . contains ( " _hidden: true " ) else { return nil }
252
+ }
253
+
250
254
if let parsed = child. value as? ArgumentSetProvider {
251
255
// Property wrappers have underscore-prefixed names
252
256
codingKey = String ( codingKey. first == " _ "
Original file line number Diff line number Diff line change @@ -149,7 +149,7 @@ internal struct HelpGenerator {
149
149
return [ ]
150
150
}
151
151
152
- let args = Array ( ArgumentSet ( commandType) )
152
+ let args = Array ( ArgumentSet ( commandType, creatingHelp : true ) )
153
153
154
154
var i = 0
155
155
while i < args. count {
Original file line number Diff line number Diff line change @@ -473,4 +473,36 @@ extension HelpGenerationTests {
473
473
474
474
""" )
475
475
}
476
+
477
+ struct optionsToHide : ParsableArguments {
478
+ @Flag ( help: " Verbose " )
479
+ var verbose : Bool = false
480
+
481
+ @Option ( help: " Custom Name " )
482
+ var customName : String ?
483
+ }
484
+
485
+ struct HideDriver : ParsableCommand {
486
+ static let configuration = CommandConfiguration ( commandName: " driver " , abstract: " Demo hiding option groups " )
487
+
488
+ @OptionGroup ( _hidden: true )
489
+ var hideMe : optionsToHide
490
+
491
+ @Option ( help: " Time to wait before timeout (in seconds) " )
492
+ var timeout : Int ?
493
+ }
494
+
495
+ func testHidingOptionGroup( ) throws {
496
+ AssertHelp ( for: HideDriver . self, equals: """
497
+ OVERVIEW: Demo hiding option groups
498
+
499
+ USAGE: driver [--verbose] [--custom-name <custom-name>] [--timeout <timeout>]
500
+
501
+ OPTIONS:
502
+ --timeout <timeout> Time to wait before timeout (in seconds)
503
+ -h, --help Show help information.
504
+
505
+ """
506
+ )
507
+ }
476
508
}
You can’t perform that action at this time.
0 commit comments