Add ability to generate shell completions

This commit is contained in:
2026-03-22 21:04:34 -05:00
parent 7000ecb3bf
commit c13d6e54ee
4 changed files with 69 additions and 3 deletions

12
Cargo.lock generated
View File

@@ -74,6 +74,15 @@ dependencies = [
"strsim", "strsim",
] ]
[[package]]
name = "clap_complete"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19c9f1dde76b736e3681f28cec9d5a61299cbaae0fce80a68e43724ad56031eb"
dependencies = [
"clap",
]
[[package]] [[package]]
name = "clap_derive" name = "clap_derive"
version = "4.6.0" version = "4.6.0"
@@ -155,9 +164,10 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
[[package]] [[package]]
name = "pallet" name = "pallet"
version = "1.0.2" version = "1.0.3"
dependencies = [ dependencies = [
"clap", "clap",
"clap_complete",
"colored", "colored",
"glob", "glob",
"serde", "serde",

View File

@@ -1,10 +1,11 @@
[package] [package]
name = "pallet" name = "pallet"
version = "1.0.2" version = "1.0.3"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
clap = { version = "4.6.0", features = ["derive"] } clap = { version = "4.6.0", features = ["derive"] }
clap_complete = "4.6.0"
colored = "3.1.1" colored = "3.1.1"
glob = "0.3.3" glob = "0.3.3"
serde = { version = "1.0.228", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }

View File

@@ -1,6 +1,6 @@
# Maintainer: Shea Frembling <sfrembling@gmail.com> # Maintainer: Shea Frembling <sfrembling@gmail.com>
pkgname=pallet pkgname=pallet
pkgver=1.0.2 pkgver=1.0.3
pkgrel=1 pkgrel=1
pkgdesc="A simple C project manager inspired by Cargo" pkgdesc="A simple C project manager inspired by Cargo"
arch=('x86_64') arch=('x86_64')

View File

@@ -4,6 +4,7 @@ use std::{
process::Command, process::Command,
}; };
use clap::CommandFactory;
use colored::Colorize; use colored::Colorize;
use glob::glob; use glob::glob;
@@ -41,6 +42,28 @@ enum Subcommand {
}, },
/// Clean all in progress files /// Clean all in progress files
Clean, Clean,
/// Utility functions
Utils {
#[clap(subcommand)]
command: UtilSubcommand,
},
}
#[derive(clap::Subcommand)]
enum UtilSubcommand {
/// Generate shell completions
Completions {
/// The shell to generate completions for
shell: ShellCompletions,
},
}
#[derive(Clone, clap::ValueEnum)]
enum ShellCompletions {
Bash,
Fish,
PowerShell,
Zsh,
} }
impl App { impl App {
@@ -87,6 +110,38 @@ impl App {
} }
_ => {} _ => {}
}, },
Subcommand::Utils { command } => match command {
UtilSubcommand::Completions { shell } => {
let name = env!("CARGO_PKG_NAME");
let mut command = App::command();
match shell {
ShellCompletions::Bash => clap_complete::generate(
clap_complete::shells::Bash,
&mut command,
name,
&mut std::io::stdout(),
),
ShellCompletions::Fish => clap_complete::generate(
clap_complete::shells::Fish,
&mut command,
name,
&mut std::io::stdout(),
),
ShellCompletions::PowerShell => clap_complete::generate(
clap_complete::shells::PowerShell,
&mut command,
name,
&mut std::io::stdout(),
),
ShellCompletions::Zsh => clap_complete::generate(
clap_complete::shells::Zsh,
&mut command,
name,
&mut std::io::stdout(),
),
}
}
},
} }
} }
} }