feat: add build time completion generation
This commit is contained in:
10
Cargo.lock
generated
10
Cargo.lock
generated
@@ -188,6 +188,15 @@ dependencies = [
|
|||||||
"strsim",
|
"strsim",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_complete"
|
||||||
|
version = "4.5.66"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c757a3b7e39161a4e56f9365141ada2a6c915a8622c408ab6bb4b5d047371031"
|
||||||
|
dependencies = [
|
||||||
|
"clap",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_derive"
|
name = "clap_derive"
|
||||||
version = "4.5.55"
|
version = "4.5.55"
|
||||||
@@ -1533,6 +1542,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap",
|
"clap",
|
||||||
|
"clap_complete",
|
||||||
"colored",
|
"colored",
|
||||||
"dirs",
|
"dirs",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
@@ -13,3 +13,10 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "chrono", "migrate"] }
|
sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite", "chrono", "migrate"] }
|
||||||
tokio = { version = "1", features = ["rt", "macros"] }
|
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"] }
|
||||||
|
|||||||
28
build.rs
Normal file
28
build.rs
Normal file
@@ -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(())
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user