Skip to main content

crap4rust/
cli.rs

1// Copyright 2025 Umberto Gotti <umberto.gotti@umbertogotti.dev>
2// Licensed under the MIT License
3// SPDX-License-Identifier: MIT
4
5use std::ffi::OsString;
6use std::path::PathBuf;
7
8use clap::Parser;
9
10use crate::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 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}