use std::ffi::OsStr; use std::path::Path; use crate::utils::{run_command_with_output, walk_dir}; fn show_usage() { println!( r#" `fmt` command help: --check : Pass `--check` argument to `cargo fmt` commands --help : Show this help"# ); } pub fn run() -> Result<(), String> { let mut check = false; // We skip binary name and the `info` command. let args = std::env::args().skip(2); for arg in args { match arg.as_str() { "--help" => { show_usage(); return Ok(()); } "--check" => check = true, _ => return Err(format!("Unknown option {arg}")), } } let cmd: &[&dyn AsRef] = if check { &[&"cargo", &"fmt", &"--check"] } else { &[&"cargo", &"fmt"] }; run_command_with_output(cmd, Some(Path::new(".")))?; run_command_with_output(cmd, Some(Path::new("build_system")))?; run_rustfmt_recursively("tests/run", check) } fn run_rustfmt_recursively

(dir: P, check: bool) -> Result<(), String> where P: AsRef, { walk_dir( dir, &mut |dir| run_rustfmt_recursively(dir, check), &mut |file_path| { if file_path.extension().filter(|ext| ext == &OsStr::new("rs")).is_some() { let rustfmt_cmd: &[&dyn AsRef] = if check { &[&"rustfmt", &"--check", &file_path] } else { &[&"rustfmt", &file_path] }; run_command_with_output(rustfmt_cmd, Some(Path::new("."))) } else { Ok(()) } }, true, ) }