use clap::{Parser, Subcommand};
#[derive(Parser, Debug)]
#[command(name = "dead-poets")]
#[command(about = "Find unused (dead) gettext keys in your project", long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
Scan {
#[arg(default_value = ".")]
path: String,
#[arg(short, long, default_value = "dead-poets.toml")]
config: String,
#[arg(short, long, default_value = "text")]
format: String,
#[arg(short, long, action = clap::ArgAction::Count)]
verbose: u8,
#[arg(long)]
audit: bool,
},
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parses_scan_args() {
let cli = Cli::try_parse_from(["dead-poets", "scan", "./proj", "--format", "json", "-vv"])
.unwrap();
let Commands::Scan {
path,
config,
format,
verbose,
audit,
} = cli.command;
assert_eq!(path, "./proj");
assert_eq!(config, "dead-poets.toml");
assert_eq!(format, "json");
assert_eq!(verbose, 2);
assert!(!audit, "audit defaults to false");
}
#[test]
fn parses_audit_flag() {
let cli = Cli::try_parse_from(["dead-poets", "scan", "--audit"]).unwrap();
let Commands::Scan { audit, .. } = cli.command;
assert!(audit);
}
#[test]
fn defaults_match_plan() {
let cli = Cli::try_parse_from(["dead-poets", "scan"]).unwrap();
let Commands::Scan {
path,
config,
format,
verbose,
audit,
} = cli.command;
assert_eq!(path, ".");
assert_eq!(config, "dead-poets.toml");
assert_eq!(format, "text");
assert_eq!(verbose, 0);
assert!(!audit);
}
}