use std::path::PathBuf;
use clap::{ArgGroup, Args};
use crate::analysis::findings::Severity;
use crate::cli::{OutputFormat, severity_parser};
#[derive(Debug, Args)]
#[command(
group(
ArgGroup::new("input")
.args(["paths", "staged", "diff", "pre_commit_push"])
.multiple(false)
),
group(ArgGroup::new("cache_mode").args(["cache_only", "push_gate"]).multiple(false))
)]
pub struct CheckArgs {
#[arg(value_name = "PATH")]
pub paths: Vec<PathBuf>,
#[arg(long)]
pub staged: bool,
#[arg(long, value_name = "REF")]
pub diff: Option<String>,
#[arg(long, value_name = "REF", requires = "diff")]
pub tip: Option<String>,
#[arg(long)]
pub pre_commit_push: bool,
#[arg(long, value_enum, default_value_t = OutputFormat::Text)]
pub format: OutputFormat,
#[arg(long, value_name = "SEVERITY", value_parser = severity_parser())]
pub fail_on: Option<Severity>,
#[arg(long)]
pub cache_only: bool,
#[arg(long)]
pub push_gate: bool,
#[arg(
long,
value_name = "N",
value_parser = clap::value_parser!(u32).range(1..),
conflicts_with = "unlimited_reviews"
)]
pub max_review_rounds: Option<u32>,
#[arg(long)]
pub unlimited_reviews: bool,
}