mirror of
https://github.com/apple/swift-argument-parser.git
synced 2026-05-07 20:12:41 +00:00
e7765e1f39
- Replaces `ArgumentSet.init(_:creatingHelp:includeHidden:)` with `ArgumentSet.init(_:visibility:)`. `visibility` intentionally does not have a default value to ensure that callers only have the correct arguments. As part of this change `includeHidden` has been replaced throughout the codebase with `visibility`. This change also fixes a bug where arguments with hidden `visibility` were being displayed in the generated command usage string.
66 lines
2.1 KiB
Swift
66 lines
2.1 KiB
Swift
//===----------------------------------------------------------*- swift -*-===//
|
|
//
|
|
// This source file is part of the Swift Argument Parser open source project
|
|
//
|
|
// Copyright (c) 2020 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
struct HelpCommand: ParsableCommand {
|
|
static var configuration = CommandConfiguration(
|
|
commandName: "help",
|
|
abstract: "Show subcommand help information.",
|
|
helpNames: [])
|
|
|
|
/// Any subcommand names provided after the `help` subcommand.
|
|
@Argument var subcommands: [String] = []
|
|
|
|
/// Capture and ignore any extra help flags given by the user.
|
|
@Flag(name: [.short, .long, .customLong("help", withSingleDash: true)], help: .private)
|
|
var help = false
|
|
|
|
private(set) var commandStack: [ParsableCommand.Type] = []
|
|
private(set) var visibility: ArgumentVisibility = .default
|
|
|
|
init() {}
|
|
|
|
mutating func run() throws {
|
|
throw CommandError(
|
|
commandStack: commandStack,
|
|
parserError: .helpRequested(visibility: visibility))
|
|
}
|
|
|
|
mutating func buildCommandStack(with parser: CommandParser) throws {
|
|
commandStack = parser.commandStack(for: subcommands)
|
|
}
|
|
|
|
/// Used for testing.
|
|
func generateHelp(screenWidth: Int) -> String {
|
|
HelpGenerator(
|
|
commandStack: commandStack,
|
|
visibility: visibility)
|
|
.rendered(screenWidth: screenWidth)
|
|
}
|
|
|
|
enum CodingKeys: CodingKey {
|
|
case subcommands
|
|
case help
|
|
}
|
|
|
|
init(from decoder: Decoder) throws {
|
|
let container = try decoder.container(keyedBy: CodingKeys.self)
|
|
self.subcommands = try container.decode([String].self, forKey: .subcommands)
|
|
self.help = try container.decode(Bool.self, forKey: .help)
|
|
}
|
|
|
|
init(commandStack: [ParsableCommand.Type], visibility: ArgumentVisibility) {
|
|
self.commandStack = commandStack
|
|
self.visibility = visibility
|
|
self.subcommands = commandStack.map { $0._commandName }
|
|
self.help = false
|
|
}
|
|
}
|