From c2d13fa73a549e9514e81cac012084c8cfb48397 Mon Sep 17 00:00:00 2001 From: Tobias Frischmann Date: Mon, 24 Aug 2026 12:16:26 +0200 Subject: [PATCH] make completions generation a command --- CHANGELOG.md | 4 ++++ src/main.rs | 28 ++++++++++------------------ 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92e4f76..9cdb083 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## unreleased + +* change `completions` generation from cli flag to command + ## 0.12.0 * add progress Spinners diff --git a/src/main.rs b/src/main.rs index d515fab..d5e6bd5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,18 +17,13 @@ mod project; mod io; #[derive(Parser)] -#[command(name = "cargo")] -#[command(bin_name = "cargo")] +#[command(name = "cargo-features", bin_name = "cargo", author, version, about, long_about = None)] enum CargoCli { Features(FeaturesArgs), } #[derive(Parser)] -#[command(author, version, about, long_about = None)] struct FeaturesArgs { - #[arg(long = "generate", value_enum)] - generator: Option, - #[arg(long, short)] package: Option, @@ -42,6 +37,7 @@ struct FeaturesArgs { #[derive(Subcommand)] enum FeaturesSubCommands { Prune(PruneArgs), + Completions { shell: Shell }, } #[derive(Args)] @@ -74,18 +70,6 @@ fn main() -> Result<()> { let CargoCli::Features(args) = CargoCli::parse(); - if let Some(generator) = args.generator { - let cmd = &mut FeaturesArgs::command(); - eprintln!("Generating completion file for {generator:?}..."); - generate( - generator, - cmd, - cmd.get_name().to_string(), - &mut std::io::stdout(), - ); - return Ok(()); - } - run(args) } @@ -100,6 +84,14 @@ fn run(args: FeaturesArgs) -> Result<()> { FeaturesSubCommands::Prune(args) => { prune(&args)?; } + FeaturesSubCommands::Completions { shell } => { + let cmd = &mut CargoCli::command(); + eprintln!("Generating completion file for {shell:?}..."); + + generate(shell, cmd, "cargo", &mut std::io::stdout()); + + return Ok(()); + } } } else { let document = Document::new(".")?; -- 2.51.2