From 3aed76706b465710a3cfe574fed102e4ffa6e499 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Fri, 6 Oct 2023 12:11:03 -0500 Subject: [PATCH] Write summary messages to stderr when fixing via stdin (instead of omitting them) (#7838) Previously we just omitted diagnostic summaries when using `--fix` or `--diff` with a stdin file. Now, we still write the summaries to stderr instead of the main writer (which is generally stdout but could be changed by `--output-file`). --- crates/ruff_cli/src/lib.rs | 22 +++++++++++++--------- crates/ruff_cli/tests/integration_test.rs | 12 ++++++++++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/crates/ruff_cli/src/lib.rs b/crates/ruff_cli/src/lib.rs index c8649791b0bc69..800a16da775466 100644 --- a/crates/ruff_cli/src/lib.rs +++ b/crates/ruff_cli/src/lib.rs @@ -208,6 +208,7 @@ pub fn check(args: CheckCommand, log_level: LogLevel) -> Result { } _ => Box::new(BufWriter::new(io::stdout())), }; + let stderr_writer = Box::new(BufWriter::new(io::stderr())); if cli.show_settings { commands::show_settings::show_settings( @@ -392,15 +393,18 @@ pub fn check(args: CheckCommand, log_level: LogLevel) -> Result { )? }; - // Always try to print violations (the printer itself may suppress output), - // unless we're writing fixes via stdin (in which case, the transformed - // source code goes to stdout). - if !(is_stdin && matches!(fix_mode, FixMode::Apply | FixMode::Diff)) { - if cli.statistics { - printer.write_statistics(&diagnostics, &mut writer)?; - } else { - printer.write_once(&diagnostics, &mut writer)?; - } + // Always try to print violations (though the printer itself may suppress output) + // If we're writing fixes via stdin, the transformed source code goes to the writer + // so send the summary to stderr instead + let mut summary_writer = if is_stdin && matches!(fix_mode, FixMode::Apply | FixMode::Diff) { + stderr_writer + } else { + writer + }; + if cli.statistics { + printer.write_statistics(&diagnostics, &mut summary_writer)?; + } else { + printer.write_once(&diagnostics, &mut summary_writer)?; } if !cli.exit_zero { diff --git a/crates/ruff_cli/tests/integration_test.rs b/crates/ruff_cli/tests/integration_test.rs index 28a34d7453c47c..13aeae1d4f97b0 100644 --- a/crates/ruff_cli/tests/integration_test.rs +++ b/crates/ruff_cli/tests/integration_test.rs @@ -150,6 +150,7 @@ fn stdin_fix_py() { print(sys.version) ----- stderr ----- + Found 1 error (1 fixed, 0 remaining). "###); } @@ -317,6 +318,7 @@ fn stdin_fix_jupyter() { "nbformat_minor": 5 } ----- stderr ----- + Found 2 errors (2 fixed, 0 remaining). "###); } @@ -336,6 +338,8 @@ fn stdin_fix_when_not_fixable_should_still_print_contents() { print(sys.version) ----- stderr ----- + -:3:4: F634 If test is a tuple, which is always `True` + Found 2 errors (1 fixed, 1 remaining). "###); } @@ -961,6 +965,9 @@ fn fix_applies_safe_fixes_by_default() { print('foo') ----- stderr ----- + -:1:14: F601 Dictionary key literal `'a'` repeated + Found 2 errors (1 fixed, 1 remaining). + 1 hidden fix can be enabled with the `--unsafe-fixes` option. "###); } @@ -988,6 +995,7 @@ fn fix_applies_unsafe_fixes_with_opt_in() { print('foo') ----- stderr ----- + Found 2 errors (2 fixed, 0 remaining). "###); } @@ -1014,6 +1022,7 @@ fn fix_only_flag_applies_safe_fixes_by_default() { print('foo') ----- stderr ----- + Fixed 1 error. "###); } @@ -1041,6 +1050,7 @@ fn fix_only_flag_applies_unsafe_fixes_with_opt_in() { print('foo') ----- stderr ----- + Fixed 2 errors. "###); } @@ -1070,6 +1080,7 @@ fn diff_shows_safe_fixes_by_default() { ----- stderr ----- + Would fix 1 error. "### ); } @@ -1102,6 +1113,7 @@ fn diff_shows_unsafe_fixes_with_opt_in() { ----- stderr ----- + Would fix 2 errors. "### ); }