Skip to content

Commit df586e7

Browse files
authored
feat: add shell completions command (#12)
- Add `clap_complete` dependency - Add `completions` subcommand to generate shell completions - Supported shells: bash, zsh, fish, powershell, elvish - Usage: gitclaw completions <shell> Part of v0.2.0 phase 1 (shell completions).
1 parent 0a128d1 commit df586e7

4 files changed

Lines changed: 24 additions & 2 deletions

File tree

Cargo.lock

Lines changed: 11 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ edition = "2021"
55

66
[dependencies]
77
clap = { version = "=4.4.18", features = ["derive", "env"] }
8+
clap_complete = "=4.4.5"
89
tokio = { version = "=1.32", features = ["rt-multi-thread", "macros"] }
910
reqwest = { version = "=0.11.22", default-features = false, features = ["json", "rustls-tls", "stream"] }
1011
serde = { version = "=1.0.188", features = ["derive"] }

src/cli.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use clap::{Parser, Subcommand};
2+
use clap_complete::Shell;
23

34
#[derive(Parser)]
45
#[command(name = "gitclaw", about = "Install software from GitHub releases")]
@@ -34,4 +35,8 @@ pub enum Commands {
3435
#[arg(short, long, default_value = "10")]
3536
limit: usize,
3637
},
38+
Completions {
39+
#[arg(value_enum)]
40+
shell: Shell,
41+
},
3742
}

src/main.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use clap::Parser;
1+
use clap::{CommandFactory, Parser};
2+
use clap_complete::generate;
23

34
mod cli;
45
mod config;
@@ -70,6 +71,11 @@ async fn run(cli: Cli, config: Config) -> anyhow::Result<()> {
7071
Commands::Search { package, limit } => {
7172
github::search_releases(&package, limit, &config).await?
7273
}
74+
Commands::Completions { shell } => {
75+
let mut cmd = Cli::command();
76+
let name = cmd.get_name().to_string();
77+
generate(shell, &mut cmd, name, &mut std::io::stdout());
78+
}
7379
}
7480

7581
Ok(())

0 commit comments

Comments
 (0)