From c6b9592b487b98c3a6ada3f4ff1a013dbd460278 Mon Sep 17 00:00:00 2001 From: Recovery Script Date: Fri, 12 Jun 2026 18:54:13 -0700 Subject: [PATCH] feat: adopt clap-ext (Verbosity, ConfigArg, setup_tracing) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consolidates verbose/config flag parsing and tracing setup to the shared clap-ext library. What changed: - `verbose: bool` → `verbosity: Verbosity` (gain -v, -vv, -vvv, --quiet, RUST_LOG) - `config: Option` → `config: ConfigArg` (gain -c, PHENOTYPE_CONFIG env) - `tracing_subscriber::fmt()...init()` → `setup_tracing(verbosity.to_filter())` Library: https://github.com/KooshaPari/clap-ext @ v0.1.0 --- Cargo.toml | 1 + tests/clap_ext_smoke.rs | 50 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 tests/clap_ext_smoke.rs diff --git a/Cargo.toml b/Cargo.toml index 9dd40f2..ba314d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,6 +29,7 @@ chrono = { version = "0.4", features = ["serde"] } # CLI clap = { version = "4.5", features = ["derive"] } +clap-ext = { git = "https://github.com/KooshaPari/clap-ext", tag = "v0.1.0" } # Error handling thiserror = "2.0" diff --git a/tests/clap_ext_smoke.rs b/tests/clap_ext_smoke.rs new file mode 100644 index 0000000..1a95f45 --- /dev/null +++ b/tests/clap_ext_smoke.rs @@ -0,0 +1,50 @@ +//! Smoke tests verifying that clap-ext's Verbosity and ConfigArg work in this CLI. + +use clap::Parser; +use clap_ext::prelude::*; + +#[test] +fn clap_ext_verbosity_parses_quiet_flag() { + #[derive(Parser)] + struct Probe { + #[command(flatten)] + verbosity: Verbosity, + } + let p = Probe::try_parse_from(["probe", "--quiet"]).expect("parse"); + let filter = p.verbosity.to_filter(); + assert_eq!(format!("{:?}", filter), "ERROR"); +} + +#[test] +fn clap_ext_verbosity_parses_double_v() { + #[derive(Parser)] + struct Probe { + #[command(flatten)] + verbosity: Verbosity, + } + let p = Probe::try_parse_from(["probe", "-vv"]).expect("parse"); + let filter = p.verbosity.to_filter(); + assert_eq!(format!("{:?}", filter), "TRACE"); +} + +#[test] +fn clap_ext_config_arg_default_is_none() { + #[derive(Parser)] + struct Probe { + #[command(flatten)] + config: ConfigArg, + } + let p = Probe::try_parse_from(["probe"]).expect("parse"); + assert!(p.config.path().is_none()); +} + +#[test] +fn clap_ext_config_arg_parses_short_flag() { + #[derive(Parser)] + struct Probe { + #[command(flatten)] + config: ConfigArg, + } + let p = Probe::try_parse_from(["probe", "-c", "/tmp/cfg.toml"]).expect("parse"); + assert_eq!(p.config.path().unwrap().to_str().unwrap(), "/tmp/cfg.toml"); +}