1#![doc = include_str!("../README.md")]
2
3use anyhow::Result;
4use bpaf::Bpaf;
5pub use lintel_validate::Reporter;
6
7#[derive(Debug, Clone, Bpaf)]
12#[bpaf(generate(check_args_inner))]
13pub struct CheckArgs {
14 #[bpaf(long("fix"), switch)]
16 pub fix: bool,
17
18 #[bpaf(external(lintel_validate::validate_args))]
19 pub validate: lintel_validate::ValidateArgs,
20}
21
22pub fn check_args() -> impl bpaf::Parser<CheckArgs> {
24 check_args_inner()
25}
26
27pub async fn run(args: &mut CheckArgs, reporter: &mut dyn Reporter) -> Result<bool> {
35 let original_globs = args.validate.globs.clone();
37 let original_exclude = args.validate.exclude.clone();
38
39 let had_validation_errors = lintel_validate::run(&mut args.validate, reporter).await?;
40
41 if args.fix {
42 let fixed = lintel_format::fix_format(&original_globs, &original_exclude)?;
43 if fixed > 0 {
44 eprintln!("Fixed formatting in {fixed} file(s).");
45 }
46 Ok(had_validation_errors)
47 } else {
48 let format_diagnostics = lintel_format::check_format(&original_globs, &original_exclude)?;
51 let had_format_errors = !format_diagnostics.is_empty();
52
53 for diag in format_diagnostics {
54 eprintln!("{:?}", miette::Report::new(diag));
55 }
56
57 Ok(had_validation_errors || had_format_errors)
58 }
59}