Skip to content

Commit 185b45f

Browse files
authored
Combine HelpCommand and HelpHiddenCommand (#408)
1 parent 7fdd562 commit 185b45f

File tree

8 files changed

+22
-86
lines changed

8 files changed

+22
-86
lines changed

Sources/ArgumentParser/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ add_library(ArgumentParser
3434

3535
Usage/DumpHelpGenerator.swift
3636
Usage/HelpCommand.swift
37-
Usage/HelpHiddenCommand.swift
3837
Usage/HelpGenerator.swift
3938
Usage/MessageInfo.swift
4039
Usage/UsageGenerator.swift

Sources/ArgumentParser/Parsable Types/ParsableArguments.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,8 @@ extension ParsableArguments {
9595
) throws -> Self {
9696
// Parse the command and unwrap the result if necessary.
9797
switch try self.asCommand.parseAsRoot(arguments) {
98-
case is HelpCommand:
99-
throw ParserError.helpRequested
100-
case is HelpHiddenCommand:
101-
throw ParserError.helpHiddenRequested
98+
case let helpCommand as HelpCommand:
99+
throw ParserError.helpRequested(visibility: helpCommand.visibility)
102100
case let result as _WrappedParsableCommand<Self>:
103101
return result.options
104102
case var result as Self:

Sources/ArgumentParser/Parsing/CommandParser.swift

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ struct CommandError: Error {
1414
var parserError: ParserError
1515
}
1616

17-
struct HelpRequested: Error {}
18-
private struct HelpHiddenRequested: Error {}
17+
struct HelpRequested: Error {
18+
var visibility: ArgumentVisibility
19+
}
1920

2021
struct CommandParser {
2122
let commandTree: Tree<ParsableCommand.Type>
@@ -76,12 +77,12 @@ extension CommandParser {
7677
/// built in help flags.
7778
func checkForBuiltInFlags(_ split: SplitArguments) throws {
7879
guard !split.contains(Name.long("experimental-help-hidden")) else {
79-
throw HelpHiddenRequested()
80+
throw HelpRequested(visibility: .hidden)
8081
}
8182

8283
// Look for help flags
8384
guard !split.contains(anyOf: self.commandStack.getHelpNames()) else {
84-
throw HelpRequested()
85+
throw HelpRequested(visibility: .default)
8586
}
8687

8788
// Look for the "dump help" request
@@ -233,20 +234,16 @@ extension CommandParser {
233234
try helpResult.buildCommandStack(with: self)
234235
return .success(helpResult)
235236
}
236-
if var helpResult = result as? HelpHiddenCommand {
237-
try helpResult.buildCommandStack(with: self)
238-
return .success(helpResult)
239-
}
240237
return .success(result)
241238
} catch let error as CommandError {
242239
return .failure(error)
243240
} catch let error as ParserError {
244241
let error = arguments.isEmpty ? ParserError.noArguments(error) : error
245242
return .failure(CommandError(commandStack: commandStack, parserError: error))
246-
} catch is HelpRequested {
247-
return .success(HelpCommand(commandStack: commandStack))
248-
} catch is HelpHiddenRequested {
249-
return .success(HelpHiddenCommand(commandStack: commandStack))
243+
} catch let helpRequest as HelpRequested {
244+
return .success(HelpCommand(
245+
commandStack: commandStack,
246+
visibility: helpRequest.visibility))
250247
} catch {
251248
return .failure(CommandError(commandStack: commandStack, parserError: .invalidState))
252249
}

Sources/ArgumentParser/Parsing/ParserError.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@
1111

1212
/// Gets thrown while parsing and will be handled by the error output generation.
1313
enum ParserError: Error {
14-
case helpRequested
15-
case helpHiddenRequested
14+
case helpRequested(visibility: ArgumentVisibility)
1615
case versionRequested
1716
case dumpHelpRequested
1817

Sources/ArgumentParser/Usage/HelpCommand.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ struct HelpCommand: ParsableCommand {
2323
var help = false
2424

2525
private(set) var commandStack: [ParsableCommand.Type] = []
26-
26+
private(set) var visibility: ArgumentVisibility = .default
27+
2728
init() {}
2829

2930
mutating func run() throws {
30-
throw CommandError(commandStack: commandStack, parserError: .helpRequested)
31+
throw CommandError(
32+
commandStack: commandStack,
33+
parserError: .helpRequested(visibility: visibility))
3134
}
3235

3336
mutating func buildCommandStack(with parser: CommandParser) throws {
@@ -50,8 +53,9 @@ struct HelpCommand: ParsableCommand {
5053
self.help = try container.decode(Bool.self, forKey: .help)
5154
}
5255

53-
init(commandStack: [ParsableCommand.Type]) {
56+
init(commandStack: [ParsableCommand.Type], visibility: ArgumentVisibility) {
5457
self.commandStack = commandStack
58+
self.visibility = visibility
5559
self.subcommands = commandStack.map { $0._commandName }
5660
self.help = false
5761
}

Sources/ArgumentParser/Usage/HelpHiddenCommand.swift

Lines changed: 0 additions & 57 deletions
This file was deleted.

Sources/ArgumentParser/Usage/MessageInfo.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,8 @@ enum MessageInfo {
2727

2828
// Exit early on built-in requests
2929
switch e.parserError {
30-
case .helpRequested:
31-
self = .help(text: HelpGenerator(commandStack: e.commandStack).rendered())
32-
return
33-
34-
case .helpHiddenRequested:
35-
self = .help(text: HelpGenerator(commandStack: e.commandStack, includeHidden: true).rendered())
30+
case .helpRequested(let visibility):
31+
self = .help(text: HelpGenerator(commandStack: e.commandStack, includeHidden: visibility != .default).rendered())
3632
return
3733

3834
case .dumpHelpRequested:

Sources/ArgumentParser/Usage/UsageGenerator.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ struct ErrorMessageGenerator {
161161
extension ErrorMessageGenerator {
162162
func makeErrorMessage() -> String? {
163163
switch error {
164-
case .helpRequested, .helpHiddenRequested, .versionRequested, .completionScriptRequested, .completionScriptCustomResponse, .dumpHelpRequested:
164+
case .helpRequested, .versionRequested, .completionScriptRequested, .completionScriptCustomResponse, .dumpHelpRequested:
165165
return nil
166166

167167
case .unsupportedShell(let shell?):

0 commit comments

Comments
 (0)