命令行参数解析器。Bouncer 为你完成所有繁重的工作。让你立刻专注于业务逻辑。
目录
解析
git-mock init . -q --bare --separate-git-dir=../git_dir --shared --template ../template/git-template
并获取值。
let directory = operands[optional: 0]
let quiet = optionValues.have(quietOption)
let bare = optionValues.have(bareOption)
let templateDirectory = optionValues.findOptionalArgument(for: templateOption)
let gitDirectory = optionValues.findOptionalArgument(for: separateGitDirOption)
let shared = optionValues.findOptionalArgument(for: sharedOption)
添加 Bouncer 到 Package.swift
。
dependencies: [
.package(url: "https://github.com/flintbox/Bouncer", from: "0.1.2")
]
现在导入!
import Bouncer
let program = Program(commands: [])
选项的配置,例如 --path
, -h
, --path ./temp
或 -p./temp
。查看正则表达式以匹配 OptionNameRegex.swift
中的选项。
属性 | 类型 | 描述 |
---|---|---|
name |
String |
选项的名称 ([[:alnum:]\-]+ )。 |
shortName |
Character? |
选项的短名称。 |
optional |
Bool |
如果该选项对于命令是否可选。用于验证。 |
argumentType |
OptionArgumentType |
选项参数类型。None(无参数),optional(可选),optional with default value(可选带默认值)或 required(必需)。 |
基本上,所有跟随命令的参数都是操作数。当然,选项和选项参数除外。
命令的配置。
属性 | 类型 | 描述 |
---|---|---|
name |
[String] |
命令的名称。子命令可以很容易地表示为 ["container", "start"] 。 |
operandType |
OperandType |
操作数类型。定义命令接受多少个操作数。 |
options |
[Option] |
可用的选项。 |
handler |
CommandHandler |
此代码块将被调用,并带有已验证的操作数和选项值。有一些扩展可以从 操作数值数组 和 选项值数组 中获取特定值。 |
程序使用命令初始化。 使用程序对象来解析和运行命令。
import Bouncer
let quietOption = Option(name: "quiet", shortName: "q", optional: true, argumentType: .none)
let bareOption = Option(name: "bare", optional: true, argumentType: .none)
let templateOption = Option(name: "template", optional: true, argumentType: .required)
let separateGitDirOption = Option(name: "separate-git-dir", optional: true, argumentType: .required)
let sharedOption = Option(name: "shared", optional: true, argumentType: .optional("group"))
let initCommand = Command(
name: ["init"],
operandType: .optionalEqual(1),
options: [quietOption, bareOption, templateOption, separateGitDirOption, sharedOption]
) { program, command, operands, optionValues in
let directory = operands[optional: 0]
let quiet = optionValues.have(quietOption)
let bare = optionValues.have(bareOption)
let templateDirectory = optionValues.findOptionalArgument(for: templateOption)
let gitDirectory = optionValues.findOptionalArgument(for: separateGitDirOption)
let shared = optionValues.findOptionalArgument(for: sharedOption)
print(
"""
init command <https://git-scm.cn/docs/git-init>
directory : \(directory ?? "nil")
quiet : \(quiet)
bare : \(bare)
template dir : \(templateDirectory ?? "nil")
git dir : \(gitDirectory ?? "nil")
shared : \(shared ?? "nil")
"""
)
}
import Bouncer
let program = Program(commands: [initCommand])
let arguments = Array(CommandLine.arguments.dropFirst())
try? program.run(withArguments: arguments)
git-mock init .
init command <https://git-scm.cn/docs/git-init>
directory : .
quiet : false
bare : false
template dir : nil
git dir : nil
shared : nil
git-mock init repository/dir --shared --template=../template --separate-git-dir ../.git --bare
init command <https://git-scm.cn/docs/git-init>
directory : repository/dir
quiet : false
bare : true
template dir : ../template
git dir : ../.git
shared : group
如果您有好的想法或建议?请随时打开一个 pull request 或给我发送 电子邮件。
希望您喜欢使用 Bouncer 构建命令行工具!