From d2635e692e7071e9c95c8883b2374a27d23d8986 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Sat, 28 Feb 2026 23:04:51 +0100 Subject: [PATCH] feat: add build time completion generation --- Cargo.lock | 10 ++++++++++ Cargo.toml | 7 +++++++ build.rs | 28 ++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 build.rs diff --git a/Cargo.lock b/Cargo.lock index cd12617..5847731 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -188,6 +188,15 @@ dependencies = [ "strsim", ] +[[package]] +name = "clap_complete" +version = "4.5.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c757a3b7e39161a4e56f9365141ada2a6c915a8622c408ab6bb4b5d047371031" +dependencies = [ + "clap", +] + [[package]] name = "clap_derive" version = "4.5.55" @@ -1533,6 +1542,7 @@ dependencies = [ "anyhow", "chrono", "clap", + "clap_complete", "colored", "dirs", "serde", diff --git a/Cargo.toml b/Cargo.toml index 0e91de7..3965397 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,3 +13,10 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "chrono", "migrate"] } tokio = { version = "1", features = ["rt", "macros"] } + +[build-dependencies] +anyhow = "1" +chrono = { version = "0.4", features = ["serde"] } +clap = { version = "4", features = ["derive"] } +clap_complete = "4" +serde = { version = "1", features = ["derive"] } diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..574e7a7 --- /dev/null +++ b/build.rs @@ -0,0 +1,28 @@ +#[allow(dead_code)] +#[path = "src/model.rs"] +mod model; + +include!("src/cli.rs"); + +use clap::{CommandFactory, ValueEnum}; +use clap_complete::{generate_to, Shell}; +use std::{env, io::Error}; + +fn main() -> Result<(), Error> { + let outdir = env::var_os("SHELL_COMPLETIONS_DIR") + .or_else(|| env::var_os("OUT_DIR")); + + let Some(outdir) = outdir else { + return Ok(()); + }; + + let mut cmd = Cli::command(); + + for shell in Shell::value_variants() { + let path = generate_to(*shell, &mut cmd, "todo", &outdir)?; + + println!("cargo:warning=completion file is generated: {path:?}"); + } + + Ok(()) +}