14 个版本
0.6.1 | 2024 年 7 月 14 日 |
---|---|
0.6.0 | 2024 年 7 月 14 日 |
0.5.1 | 2023 年 3 月 10 日 |
0.4.0 | 2022 年 10 月 4 日 |
0.1.0 | 2022 年 4 月 5 日 |
#43 在 命令行界面
80,065 每月下载量
用于 22 个 包
17KB
199 代码行
clap-complete-command
简化为 Clap 添加 shell 完成命令的样板代码
兼容的 clap 版本
clap 版本 |
clap_complete_command 版本 |
---|---|
v3 | v0.1, v0.2, v0.3 |
v4 | v0.4, v0.5, v0.6 |
示例
派生
use clap::{CommandFactory, Parser, Subcommand};
#[derive(Parser)]
struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
/// Generate shell completions
Completions {
/// The shell to generate the completions for
#[arg(value_enum)]
shell: clap_complete_command::Shell,
},
}
fn main() {
let cli = Cli::parse();
match cli.command {
// e.g. `$ cli completions bash`
Commands::Completions { shell } => {
shell.generate(&mut Cli::command(), &mut std::io::stdout());
}
}
}
构建器
use clap::{Arg, Command};
fn build_cli() -> Command {
Command::new(env!("CARGO_PKG_NAME"))
.subcommand_required(true)
.subcommand(
Command::new("completions")
.about("Generate shell completions")
.arg(
Arg::new("shell")
.value_name("SHELL")
.help("The shell to generate the completions for")
.required(true)
.value_parser(
clap::builder::EnumValueParser::<clap_complete_command::Shell>::new(),
),
),
)
}
fn main() {
let matches = build_cli().get_matches();
match matches.subcommand() {
Some(("completions", sub_matches)) => {
// e.g. `$ cli completions bash`
if let Some(shell) = sub_matches.get_one::<clap_complete_command::Shell>("shell") {
let mut command = build_cli();
shell.generate(&mut command, &mut std::io::stdout());
}
}
_ => {
unreachable!("Exhausted list of subcommands and `subcommand_required` prevents `None`")
}
}
}
支持的 shell
支持的 shell 可在 clap_complete_command::Shell
中查看。
依赖项
~1–1.6MB
~27K SLoC