pub mod format;
pub mod toml_config;
use clap::{Parser, Subcommand, ValueEnum};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "baseline", about = "Enforce architectural decisions AI coding tools keep ignoring")]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
Scan {
#[arg(required_unless_present = "stdin")]
paths: Vec<PathBuf>,
#[arg(short, long, default_value = "baseline.toml")]
config: PathBuf,
#[arg(short, long, value_enum, default_value_t = OutputFormat::Pretty)]
format: OutputFormat,
#[arg(long)]
stdin: bool,
#[arg(long, requires = "stdin")]
filename: Option<String>,
#[arg(long, conflicts_with = "stdin")]
changed_only: bool,
#[arg(long, requires = "changed_only")]
base: Option<String>,
#[arg(long)]
fix: bool,
#[arg(long, requires = "fix")]
dry_run: bool,
},
Baseline {
#[arg(required = true)]
paths: Vec<PathBuf>,
#[arg(short, long, default_value = "baseline.toml")]
config: PathBuf,
#[arg(short, long, default_value = ".baseline-snapshot.json")]
output: PathBuf,
},
Mcp {
#[arg(short, long, default_value = "baseline.toml")]
config: PathBuf,
},
Init {
#[arg(short, long, default_value = "baseline.toml")]
output: PathBuf,
#[arg(long)]
force: bool,
},
Ratchet {
#[command(subcommand)]
command: RatchetCommands,
},
}
#[derive(Subcommand)]
pub enum RatchetCommands {
Add {
pattern: String,
#[arg(long)]
id: Option<String>,
#[arg(long, default_value = "**/*")]
glob: String,
#[arg(long)]
regex: bool,
#[arg(long)]
message: Option<String>,
#[arg(short, long, default_value = "baseline.toml")]
config: PathBuf,
#[arg(default_value = ".")]
paths: Vec<PathBuf>,
},
Down {
rule_id: String,
#[arg(short, long, default_value = "baseline.toml")]
config: PathBuf,
#[arg(default_value = ".")]
paths: Vec<PathBuf>,
},
From {
baseline: PathBuf,
#[arg(short, long, default_value = "baseline.toml")]
config: PathBuf,
},
}
#[derive(Clone, ValueEnum)]
pub enum OutputFormat {
Pretty,
Json,
Compact,
Github,
Sarif,
Markdown,
}