crap4rust/invocation/
cli.rs1use std::ffi::OsString;
6use std::path::PathBuf;
7
8use clap::Parser;
9
10use crate::reporting::output_format::OutputFormat;
11
12#[derive(Debug, Clone, Parser)]
13#[command(name = "crap4rust")]
14#[command(about = "Compute CRAP scores for Rust functions")]
15pub struct Args {
16 #[arg(long)]
17 pub coverage: Option<PathBuf>,
18 #[arg(long)]
19 pub manifest_path: Option<PathBuf>,
20 #[arg(long)]
21 pub package: Vec<String>,
22 #[arg(long)]
23 pub features: Option<String>,
24 #[arg(long, default_value_t = false)]
25 pub all_features: bool,
26 #[arg(long, default_value_t = false)]
27 pub no_default_features: bool,
28 #[arg(long, default_value_t = false)]
29 pub include_test_targets: bool,
30 #[arg(long)]
31 pub exclude_path: Vec<String>,
32 #[arg(long, default_value_t = 30.0)]
33 pub threshold: f64,
34 #[arg(long, default_value_t = 5.0)]
35 pub project_threshold: f64,
36 #[arg(long, default_value_t = false)]
37 pub strict: bool,
38 #[arg(long, default_value_t = false)]
39 pub warn_only: bool,
40 #[arg(long, default_value_t = 20.0)]
41 pub warn_threshold: f64,
42 #[arg(long, default_value_t = OutputFormat::Human, value_enum)]
43 pub output_format: OutputFormat,
44}
45
46impl Args {
47 pub(crate) fn parse_args() -> Self {
48 Self::parse()
49 }
50
51 pub fn parse_from_args<I, T>(args: I) -> Self
52 where
53 I: IntoIterator<Item = T>,
54 T: Into<OsString> + Clone,
55 {
56 Self::parse_from(args)
57 }
58}