From 7655f6b51e397bf0a5936826578799c5d0ed769a Mon Sep 17 00:00:00 2001 From: nightcityblade Date: Sun, 9 Aug 2026 12:54:24 +0800 Subject: [PATCH] fix(format): default ruff to check mode --- src/cmds/system/format_cmd.rs | 38 ++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/cmds/system/format_cmd.rs b/src/cmds/system/format_cmd.rs index 0ebfa3ab45..f98758b032 100644 --- a/src/cmds/system/format_cmd.rs +++ b/src/cmds/system/format_cmd.rs @@ -55,6 +55,22 @@ fn detect_formatter_in_dir(args: &[String], dir: &Path) -> String { "ruff".to_string() } +fn formatter_prefix_args(formatter: &str, user_args: &[String]) -> Vec<&'static str> { + match formatter { + "black" if !user_args.iter().any(|arg| arg == "--check" || arg == "--diff") => { + vec!["--check"] + } + "ruff" if user_args.is_empty() || !user_args[0].starts_with("format") => { + let mut args = vec!["format"]; + if !user_args.iter().any(|arg| arg == "--check" || arg == "--diff") { + args.push("--check"); + } + args + } + _ => Vec::new(), + } +} + pub fn run(args: &[String], verbose: u8) -> Result { let timer = tracking::TimedExecution::start(); @@ -84,16 +100,8 @@ pub fn run(args: &[String], verbose: u8) -> Result { // Add formatter-specific flags let user_args = args[start_idx..].to_vec(); - match formatter.as_str() { - // Inject --check if not present for check mode - "black" if !user_args.iter().any(|a| a == "--check" || a == "--diff") => { - cmd.arg("--check"); - } - // Add "format" subcommand if not present - "ruff" if user_args.is_empty() || !user_args[0].starts_with("format") => { - cmd.arg("format"); - } - _ => {} + for arg in formatter_prefix_args(&formatter, &user_args) { + cmd.arg(arg); } // Add user arguments @@ -304,6 +312,16 @@ mod tests { assert_eq!(formatter, "ruff"); } + #[test] + fn test_ruff_defaults_to_check_mode() { + assert_eq!(formatter_prefix_args("ruff", &[]), ["format", "--check"]); + assert_eq!( + formatter_prefix_args("ruff", &["--diff".to_string()]), + ["format"] + ); + assert!(formatter_prefix_args("ruff", &["format".to_string()]).is_empty()); + } + #[test] fn test_detect_formatter_from_pyproject_black() { let temp_dir = TempDir::new().unwrap();