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