use super::*;
const SUBCOMMAND_HELP_TEMPLATE: &str = "\
{before-help}\x1b[1m\x1b[33mDescription:\x1b[0m\n {about}\n\n\
\x1b[1m\x1b[33mUsage:\x1b[0m\n {usage}\n\n\
{all-args}{after-help}";
#[derive(Args, Clone)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct AnalyseArgs {
#[arg(value_name = "paths")]
pub(crate) paths: Vec<PathBuf>,
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long)]
pub(crate) no_config: bool,
#[arg(long, default_value = "text")]
pub(crate) format: OutputFormat,
#[arg(long)]
pub(crate) fail_on: Option<FailThreshold>,
#[arg(long)]
pub(crate) fail_on_new: bool,
#[arg(long)]
pub(crate) include_ignored: bool,
#[arg(
long,
value_name = "MODE",
num_args = 0..=1,
default_missing_value = "working-tree",
allow_hyphen_values = true,
requires = "diff_git_unsafe"
)]
pub(crate) diff: Option<String>,
#[arg(long, value_name = "REF", conflicts_with_all = ["diff", "diff_patch"], requires = "diff_git_unsafe")]
pub(crate) since: Option<String>,
#[arg(long, value_name = "RANGES", conflicts_with_all = ["diff", "diff_patch", "since"])]
pub(crate) changed_ranges: Option<String>,
#[arg(long, default_value = "symbol")]
pub(crate) changed_scope: ChangedScope,
#[arg(long, value_name = "PATH", conflicts_with = "diff")]
pub(crate) diff_patch: Option<PathBuf>,
#[arg(long)]
pub(crate) history_file: Option<PathBuf>,
#[arg(long, num_args = 0..=1, default_missing_value = DEFAULT_BASELINE)]
pub(crate) baseline: Option<PathBuf>,
#[arg(long, num_args = 0..=1, default_missing_value = DEFAULT_BASELINE)]
pub(crate) generate_baseline: Option<PathBuf>,
#[arg(long)]
pub(crate) no_baseline: bool,
#[arg(long, hide = true)]
pub(crate) diff_git_unsafe: bool,
}
#[derive(Clone, Copy, Debug, ValueEnum, PartialEq, Eq)]
pub(crate) enum HookFormat {
Json,
}
#[derive(Args, Clone)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct HookArgs {
#[arg(value_name = "paths")]
pub(crate) paths: Vec<PathBuf>,
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long)]
pub(crate) no_config: bool,
#[arg(long, default_value = "json")]
pub(crate) format: HookFormat,
#[arg(long)]
pub(crate) capabilities: bool,
#[arg(long, value_name = "RANGES")]
pub(crate) changed_ranges: Option<String>,
#[arg(long, default_value = "symbol")]
pub(crate) changed_scope: ChangedScope,
#[arg(
long,
value_name = "REF",
conflicts_with = "baseline",
allow_hyphen_values = true,
requires = "diff_git_unsafe"
)]
pub(crate) diff: Option<String>,
#[arg(long, value_name = "PATH", conflicts_with = "diff")]
pub(crate) baseline: Option<PathBuf>,
#[arg(long, hide = true)]
pub(crate) diff_git_unsafe: bool,
}
#[derive(Args)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct ReportArgs {
#[arg(value_name = "paths")]
pub(crate) paths: Vec<PathBuf>,
#[arg(long, default_value = "html")]
pub(crate) format: ReportFormat,
#[arg(long)]
pub(crate) output: Option<PathBuf>,
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long)]
pub(crate) no_config: bool,
#[arg(long)]
pub(crate) fail_on: Option<FailThreshold>,
#[arg(long)]
pub(crate) include_ignored: bool,
#[arg(long)]
pub(crate) no_baseline: bool,
}
#[derive(Args)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct DashboardArgs {
#[arg(long, default_value = "127.0.0.1")]
pub(crate) host: String,
#[arg(long, default_value_t = 8766)]
pub(crate) port: u16,
#[arg(long, default_value = ".")]
pub(crate) project_root: PathBuf,
}
#[derive(Args)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct ListRulesArgs {
#[arg(value_name = "rule_id")]
pub(crate) rule_id: Option<String>,
#[arg(long, default_value = "text")]
pub(crate) format: RuleListFormat,
#[arg(long)]
pub(crate) selector: Option<String>,
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long)]
pub(crate) no_config: bool,
}
#[derive(Args, Clone)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct SummaryArgs {
#[arg(value_name = "paths")]
pub(crate) paths: Vec<PathBuf>,
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long)]
pub(crate) no_config: bool,
#[arg(long, default_value = "text")]
pub(crate) format: SummaryFormat,
#[arg(long, default_value_t = 10)]
pub(crate) top: usize,
#[arg(long)]
pub(crate) include_ignored: bool,
}
#[derive(Clone, Copy, Debug, ValueEnum, PartialEq, Eq)]
pub(crate) enum CheckIgnoreFormat {
Text,
Json,
}
#[derive(Args, Clone)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct CheckIgnoreArgs {
#[arg(value_name = "paths", required = true)]
pub(crate) paths: Vec<PathBuf>,
#[arg(long, default_value = "text")]
pub(crate) format: CheckIgnoreFormat,
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long, conflicts_with = "config")]
pub(crate) no_config: bool,
}
#[derive(Args, Clone)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct CompletionArgs {
#[arg(long, default_value = "bash")]
pub(crate) shell: Shell,
}
#[derive(Args, Clone)]
#[command(help_template = SUBCOMMAND_HELP_TEMPLATE)]
pub(crate) struct InitArgs {
#[arg(long, default_value = ".gruff-rs.yaml")]
pub(crate) output: PathBuf,
#[arg(long)]
pub(crate) force: bool,
#[arg(long, conflicts_with_all = ["output", "force"])]
pub(crate) stdout: bool,
}