use clap::{CommandFactory, Parser};
#[derive(Parser)]
#[command(name = "pkg-checker")]
#[command(about = "检查全局安装的Cargo包更新")]
#[command(version)]
pub struct Cli {
#[arg(short, long)]
pub verbose: bool,
#[arg(short, long)]
pub updates_only: bool,
#[arg(long)]
pub no_interactive: bool,
#[arg(long)]
pub include_prerelease: bool,
#[arg(long, value_name = "SHELL")]
pub completion: Option<String>,
}
impl Cli {
pub fn generate_completion(shell: String) {
let mut cmd = Cli::command();
let shell = shell.to_lowercase();
let shell_type = match shell.as_str() {
"bash" => clap_complete::Shell::Bash,
"zsh" => clap_complete::Shell::Zsh,
"fish" => clap_complete::Shell::Fish,
"powershell" => clap_complete::Shell::PowerShell,
"elvish" => clap_complete::Shell::Elvish,
_ => {
eprintln!(
"不支持的 shell: {}. 支持的 shell: bash, zsh, fish, powershell, elvish",
shell
);
std::process::exit(1);
}
};
clap_complete::generate(shell_type, &mut cmd, "pkg-checker", &mut std::io::stdout());
}
}