mirror of
https://github.com/apple/swift-argument-parser.git
synced 2026-06-06 20:18:23 +00:00
- Adds check to ensure that `wrapped(to:wrappingIndent:)` doesn't attempt to retrieve a negative prefix. - The Usage struct was composed of an array of strings which always contained exact one string at runtime. This struct has been removed and replaced with a single usage string. - Removes HelpGenerator._screenWidthOverride in favor of explicitly setting the screen width in generateHelp calls.
59 lines
1.9 KiB
Swift
59 lines
1.9 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: .hidden)
|
|
var help = false
|
|
|
|
private(set) var commandStack: [ParsableCommand.Type] = []
|
|
|
|
init() {}
|
|
|
|
mutating func run() throws {
|
|
throw CommandError(commandStack: commandStack, parserError: .helpRequested)
|
|
}
|
|
|
|
mutating func buildCommandStack(with parser: CommandParser) throws {
|
|
commandStack = parser.commandStack(for: subcommands)
|
|
}
|
|
|
|
/// Used for testing.
|
|
func generateHelp(screenWidth: Int) -> String {
|
|
HelpGenerator(commandStack: commandStack).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]) {
|
|
self.commandStack = commandStack
|
|
self.subcommands = commandStack.map { $0._commandName }
|
|
self.help = false
|
|
}
|
|
}
|