From 5bb9720a10618ed9cecc401df231e360710780ee Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 22 May 2024 00:31:03 -0400 Subject: [PATCH] Avoid multiline quotes warning with `quote-style = preserve` (#11490) ## Summary Closes https://github.com/astral-sh/ruff/issues/11063. --- crates/ruff/src/commands/format.rs | 8 ++++++ crates/ruff/tests/format.rs | 42 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/crates/ruff/src/commands/format.rs b/crates/ruff/src/commands/format.rs index 0c3e94409f977..cfe49714adb92 100644 --- a/crates/ruff/src/commands/format.rs +++ b/crates/ruff/src/commands/format.rs @@ -857,12 +857,20 @@ pub(super) fn warn_incompatible_formatter_settings(resolver: &Resolver) { if setting.linter.rules.enabled(Rule::BadQuotesMultilineString) && setting.linter.flake8_quotes.multiline_quotes == Quote::Single + && matches!( + setting.formatter.quote_style, + QuoteStyle::Single | QuoteStyle::Double + ) { warn_user_once!("The `flake8-quotes.multiline-quotes=\"single\"` option is incompatible with the formatter. We recommend disabling `Q001` when using the formatter, which enforces double quotes for multiline strings. Alternatively, set the `flake8-quotes.multiline-quotes` option to `\"double\"`.`"); } if setting.linter.rules.enabled(Rule::BadQuotesDocstring) && setting.linter.flake8_quotes.docstring_quotes == Quote::Single + && matches!( + setting.formatter.quote_style, + QuoteStyle::Single | QuoteStyle::Double + ) { warn_user_once!("The `flake8-quotes.multiline-quotes=\"single\"` option is incompatible with the formatter. We recommend disabling `Q002` when using the formatter, which enforces double quotes for docstrings. Alternatively, set the `flake8-quotes.docstring-quotes` option to `\"double\"`.`"); } diff --git a/crates/ruff/tests/format.rs b/crates/ruff/tests/format.rs index eab8b8380ea32..083d26bddb591 100644 --- a/crates/ruff/tests/format.rs +++ b/crates/ruff/tests/format.rs @@ -1038,6 +1038,48 @@ def say_hy(name: str): Ok(()) } +#[test] +fn valid_linter_options_preserve() -> Result<()> { + let tempdir = TempDir::new()?; + let ruff_toml = tempdir.path().join("ruff.toml"); + fs::write( + &ruff_toml, + r#" +[lint] +select = ["Q"] + +[lint.flake8-quotes] +inline-quotes = "single" +docstring-quotes = "single" +multiline-quotes = "single" + +[format] +quote-style = "preserve" +"#, + )?; + + let test_path = tempdir.path().join("test.py"); + fs::write( + &test_path, + r#" +def say_hy(name: str): + print(f"Hy {name}")"#, + )?; + + assert_cmd_snapshot!(Command::new(get_cargo_bin(BIN_NAME)) + .args(["format", "--no-cache", "--config"]) + .arg(&ruff_toml) + .arg(test_path), @r###" + success: true + exit_code: 0 + ----- stdout ----- + 1 file reformatted + + ----- stderr ----- + "###); + Ok(()) +} + #[test] fn all_rules_default_options() -> Result<()> { let tempdir = TempDir::new()?;