-
Notifications
You must be signed in to change notification settings - Fork 327
/
CommandConfiguration.swift
114 lines (103 loc) · 4.22 KB
/
CommandConfiguration.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//===----------------------------------------------------------*- 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
//
//===----------------------------------------------------------------------===//
/// The configuration for a command.
public struct CommandConfiguration {
/// The name of the command to use on the command line.
///
/// If `nil`, the command name is derived by converting the name of
/// the command type to hyphen-separated lowercase words.
public var commandName: String?
/// The name of this command's "super-command". (experimental)
///
/// Use this when a command is part of a group of commands that are installed
/// with a common dash-prefix, like `git`'s and `swift`'s constellation of
/// independent commands.
public var _superCommandName: String?
/// A one-line description of this command.
public var abstract: String
/// A longer description of this command, to be shown in the extended help
/// display.
public var discussion: String
/// Version information for this command.
public var version: String
/// A Boolean value indicating whether this command should be shown in
/// the extended help display.
public var shouldDisplay: Bool
/// An array of the types that define subcommands for this command.
public var subcommands: [ParsableCommand.Type]
/// The default command type to run if no subcommand is given.
public var defaultSubcommand: ParsableCommand.Type?
/// Flag names to be used for help.
public var helpNames: NameSpecification?
/// Creates the configuration for a command.
///
/// - Parameters:
/// - commandName: The name of the command to use on the command line. If
/// `commandName` is `nil`, the command name is derived by converting
/// the name of the command type to hyphen-separated lowercase words.
/// - abstract: A one-line description of the command.
/// - discussion: A longer description of the command.
/// - version: The version number for this command. When you provide a
/// non-empty string, the argument parser prints it if the user provides
/// a `--version` flag.
/// - shouldDisplay: A Boolean value indicating whether the command
/// should be shown in the extended help display.
/// - subcommands: An array of the types that define subcommands for the
/// command.
/// - defaultSubcommand: The default command type to run if no subcommand
/// is given.
/// - helpNames: The flag names to use for requesting help, when combined
/// with a simulated Boolean property named `help`. If `helpNames` is
/// `nil`, the names are inherited from the parent command, if any, or
/// `-h` and `--help`.
public init(
commandName: String? = nil,
abstract: String = "",
discussion: String = "",
version: String = "",
shouldDisplay: Bool = true,
subcommands: [ParsableCommand.Type] = [],
defaultSubcommand: ParsableCommand.Type? = nil,
helpNames: NameSpecification? = nil
) {
self.commandName = commandName
self.abstract = abstract
self.discussion = discussion
self.version = version
self.shouldDisplay = shouldDisplay
self.subcommands = subcommands
self.defaultSubcommand = defaultSubcommand
self.helpNames = helpNames
}
/// Creates the configuration for a command with a "super-command".
/// (experimental)
public init(
commandName: String? = nil,
_superCommandName: String,
abstract: String = "",
discussion: String = "",
version: String = "",
shouldDisplay: Bool = true,
subcommands: [ParsableCommand.Type] = [],
defaultSubcommand: ParsableCommand.Type? = nil,
helpNames: NameSpecification? = nil
) {
self.commandName = commandName
self._superCommandName = _superCommandName
self.abstract = abstract
self.discussion = discussion
self.version = version
self.shouldDisplay = shouldDisplay
self.subcommands = subcommands
self.defaultSubcommand = defaultSubcommand
self.helpNames = helpNames
}
}