use crate::cli::ValidateArgs;
use crate::commands::{ignores, lint, version_bump};
use crate::domain::config::validate;
use crate::errors::Result;
use crate::io::{configfs, env};
pub fn run(args: ValidateArgs) -> Result<i32> {
let cwd = lint::resolve_cwd(&args.cwd)?;
let loaded = configfs::load(&args.config, &cwd)?;
let mut config = loaded.config;
let mut scopes = loaded.scopes;
let pre_files = config.files.clone();
env::apply_overrides(&mut config)?;
config.files.exclude.extend(args.exclude.iter().cloned());
if config.files != pre_files {
ignores::retarget_session_scopes(&mut scopes, &cwd, &config.files);
}
validate(&config)?;
let targets = ignores::target_files(&cwd, &config, &scopes, &[])?;
let known = ignores::known_rules(&config);
ignores::check(&cwd, &targets, &known)?;
let backend = args.diff.unwrap_or_default();
let versioned = version_bump::check(&cwd, &[], backend, args.diff_base.clone())?;
println!(
"llmlint: static checks passed ({} file(s) scanned for ignores, \
{versioned} versioned config(s) checked)",
targets.len()
);
Ok(0)
}