From ff06cfdb76394d522c40ee13e3eb98e4198e1ef8 Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Wed, 20 Nov 2024 12:14:13 +0100 Subject: [PATCH 1/7] Implemented non-string-literal-as-assert-message --- .../resources/test/fixtures/ruff/RUF035.py | 5 ++ .../src/checkers/ast/analyze/statement.rs | 3 ++ crates/ruff_linter/src/codes.rs | 1 + crates/ruff_linter/src/rules/ruff/mod.rs | 1 + .../ruff_linter/src/rules/ruff/rules/mod.rs | 3 ++ .../non_string_literal_as_assert_message.rs | 51 +++++++++++++++++++ 6 files changed, 64 insertions(+) create mode 100644 crates/ruff_linter/resources/test/fixtures/ruff/RUF035.py create mode 100644 crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs diff --git a/crates/ruff_linter/resources/test/fixtures/ruff/RUF035.py b/crates/ruff_linter/resources/test/fixtures/ruff/RUF035.py new file mode 100644 index 00000000000000..5787f2d14dcbf2 --- /dev/null +++ b/crates/ruff_linter/resources/test/fixtures/ruff/RUF035.py @@ -0,0 +1,5 @@ +fruits = ["apples", "plums", "pear"] +fruits.filter(lambda fruit: fruit.startwith("p")) +assert len(fruits), 2 + +assert True, "always true" \ No newline at end of file diff --git a/crates/ruff_linter/src/checkers/ast/analyze/statement.rs b/crates/ruff_linter/src/checkers/ast/analyze/statement.rs index 6624dd8d144792..e0b0f835002e55 100644 --- a/crates/ruff_linter/src/checkers/ast/analyze/statement.rs +++ b/crates/ruff_linter/src/checkers/ast/analyze/statement.rs @@ -1302,6 +1302,9 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::AssertWithPrintMessage) { ruff::rules::assert_with_print_message(checker, assert_stmt); } + if checker.enabled(Rule::NonStringLiteralAsAssertMessage) { + ruff::rules::non_string_literal_as_assert_message(checker, assert_stmt); + } } Stmt::With( with_stmt @ ast::StmtWith { diff --git a/crates/ruff_linter/src/codes.rs b/crates/ruff_linter/src/codes.rs index be27d11fc6b1d9..01b7954f1150a0 100644 --- a/crates/ruff_linter/src/codes.rs +++ b/crates/ruff_linter/src/codes.rs @@ -965,6 +965,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Ruff, "032") => (RuleGroup::Preview, rules::ruff::rules::DecimalFromFloatLiteral), (Ruff, "033") => (RuleGroup::Preview, rules::ruff::rules::PostInitDefault), (Ruff, "034") => (RuleGroup::Preview, rules::ruff::rules::UselessIfElse), + (Ruff, "035") => (RuleGroup::Preview, rules::ruff::rules::NonStringLiteralAsAssertMessage), (Ruff, "100") => (RuleGroup::Stable, rules::ruff::rules::UnusedNOQA), (Ruff, "101") => (RuleGroup::Stable, rules::ruff::rules::RedirectedNOQA), diff --git a/crates/ruff_linter/src/rules/ruff/mod.rs b/crates/ruff_linter/src/rules/ruff/mod.rs index 8b02d708e7efd2..3576ea2f7aa25f 100644 --- a/crates/ruff_linter/src/rules/ruff/mod.rs +++ b/crates/ruff_linter/src/rules/ruff/mod.rs @@ -62,6 +62,7 @@ mod tests { #[test_case(Rule::UselessIfElse, Path::new("RUF034.py"))] #[test_case(Rule::RedirectedNOQA, Path::new("RUF101.py"))] #[test_case(Rule::PostInitDefault, Path::new("RUF033.py"))] + #[test_case(Rule::NonStringLiteralAsAssertMessage, Path::new("RUF035.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( diff --git a/crates/ruff_linter/src/rules/ruff/rules/mod.rs b/crates/ruff_linter/src/rules/ruff/rules/mod.rs index d386c3c7c6d8cb..0419992429e6a5 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/mod.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/mod.rs @@ -78,3 +78,6 @@ pub(crate) enum Context { Docstring, Comment, } +pub(crate) use non_string_literal_as_assert_message::*; + +mod non_string_literal_as_assert_message; diff --git a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs new file mode 100644 index 00000000000000..3c246f6ad88dff --- /dev/null +++ b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs @@ -0,0 +1,51 @@ +use ruff_diagnostics::{Diagnostic, Violation}; +use ruff_macros::{derive_message_formats, violation}; +use ruff_python_ast::StmtAssert; +use ruff_text_size::Ranged; + +use crate::checkers::ast::Checker; + +/// ## What it does +/// Checks for uses of non-string literal as assert message. +/// +/// ## Why is this bad? +/// Non-string literal in assert message does not provide any usefull +/// information and is likely an unitentional use of `assert_equal(expr, expr)` +/// from other languages. +/// +/// ## Example +/// ```python +/// fruits = ["apples", "plums", "pear"] +/// fruits.filter(lambda fruit: fruit.startwith("p")) +/// assert len(fruits), 2 # True unless the list is empty +/// ``` +/// +/// Use instead: +/// ```python +/// fruits = ["apples", "plums", "pear"] +/// fruits.filter(lambda fruit: fruit.startwith("p")) +/// assert len(fruits) == 2 +/// ``` +#[violation] +pub struct NonStringLiteralAsAssertMessage; + +impl Violation for NonStringLiteralAsAssertMessage { + #[derive_message_formats] + fn message(&self) -> String { + "Non-string literal used as assert message".to_string() + } +} + +/// RUF035 +pub(crate) fn non_string_literal_as_assert_message(checker: &mut Checker, stmt: &StmtAssert) { + let Some(message) = stmt.msg.as_deref() else { + return; + }; + if message.is_string_literal_expr() || !message.is_literal_expr() { + return; + } + checker.diagnostics.push(Diagnostic::new( + NonStringLiteralAsAssertMessage, + message.range() + )); +} From df13ba58017d1eb0875c188684ba55d4018ea88a Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Wed, 20 Nov 2024 12:16:42 +0100 Subject: [PATCH 2/7] Updated snap --- ...inter__rules__ruff__tests__RUF035_RUF035.py.snap | 13 +++++++++++++ ruff.schema.json | 1 + 2 files changed, 14 insertions(+) create mode 100644 crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap diff --git a/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap b/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap new file mode 100644 index 00000000000000..ac5fb734c74ec0 --- /dev/null +++ b/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap @@ -0,0 +1,13 @@ +--- +source: crates/ruff_linter/src/rules/ruff/mod.rs +snapshot_kind: text +--- +RUF035.py:3:21: RUF035 Non-string literal used as assert message + | +1 | fruits = ["apples", "plums", "pear"] +2 | fruits.filter(lambda fruit: fruit.startwith("p")) +3 | assert len(fruits), 2 + | ^ RUF035 +4 | +5 | assert True, "always true" + | diff --git a/ruff.schema.json b/ruff.schema.json index b1e24b47760305..f0540092a85741 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -3816,6 +3816,7 @@ "RUF032", "RUF033", "RUF034", + "RUF035", "RUF1", "RUF10", "RUF100", From a73687d9f7d295e3978caad25f7f2400d2713531 Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Wed, 20 Nov 2024 12:32:04 +0100 Subject: [PATCH 3/7] Fixed typos --- .../ruff/rules/non_string_literal_as_assert_message.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs index 3c246f6ad88dff..297a83b3b3486d 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs @@ -7,22 +7,22 @@ use crate::checkers::ast::Checker; /// ## What it does /// Checks for uses of non-string literal as assert message. -/// +/// /// ## Why is this bad? -/// Non-string literal in assert message does not provide any usefull +/// Non-string literal in assert message does not provide any useful /// information and is likely an unitentional use of `assert_equal(expr, expr)` /// from other languages. /// /// ## Example /// ```python -/// fruits = ["apples", "plums", "pear"] +/// fruits = ["apples", "plums", "pears"] /// fruits.filter(lambda fruit: fruit.startwith("p")) /// assert len(fruits), 2 # True unless the list is empty /// ``` /// /// Use instead: /// ```python -/// fruits = ["apples", "plums", "pear"] +/// fruits = ["apples", "plums", "pears"] /// fruits.filter(lambda fruit: fruit.startwith("p")) /// assert len(fruits) == 2 /// ``` @@ -46,6 +46,6 @@ pub(crate) fn non_string_literal_as_assert_message(checker: &mut Checker, stmt: } checker.diagnostics.push(Diagnostic::new( NonStringLiteralAsAssertMessage, - message.range() + message.range(), )); } From a90ef8ff4d65ee01874312c4450c49d36fe7466f Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Wed, 20 Nov 2024 13:20:38 +0100 Subject: [PATCH 4/7] bytes literal is also viable --- .../rules/non_string_literal_as_assert_message.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs index 297a83b3b3486d..bc328eb458d8fc 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs @@ -1,6 +1,6 @@ use ruff_diagnostics::{Diagnostic, Violation}; use ruff_macros::{derive_message_formats, violation}; -use ruff_python_ast::StmtAssert; +use ruff_python_ast::{Expr, StmtAssert}; use ruff_text_size::Ranged; use crate::checkers::ast::Checker; @@ -41,9 +41,17 @@ pub(crate) fn non_string_literal_as_assert_message(checker: &mut Checker, stmt: let Some(message) = stmt.msg.as_deref() else { return; }; - if message.is_string_literal_expr() || !message.is_literal_expr() { + + if !matches!( + message, + Expr::NumberLiteral(_) + | Expr::BooleanLiteral(_) + | Expr::NoneLiteral(_) + | Expr::EllipsisLiteral(_) + ) { return; } + checker.diagnostics.push(Diagnostic::new( NonStringLiteralAsAssertMessage, message.range(), From 73da4584e9e02823042489f83de3d697919f8ab5 Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Wed, 20 Nov 2024 15:23:45 +0100 Subject: [PATCH 5/7] Changing rule code to RUF040 --- .../resources/test/fixtures/ruff/{RUF035.py => RUF040.py} | 0 crates/ruff_linter/src/codes.rs | 2 +- crates/ruff_linter/src/rules/ruff/mod.rs | 2 +- .../rules/ruff/rules/non_string_literal_as_assert_message.rs | 2 +- ...=> ruff_linter__rules__ruff__tests__RUF040_RUF040.py.snap} | 4 ++-- ruff.schema.json | 3 ++- 6 files changed, 7 insertions(+), 6 deletions(-) rename crates/ruff_linter/resources/test/fixtures/ruff/{RUF035.py => RUF040.py} (100%) rename crates/ruff_linter/src/rules/ruff/snapshots/{ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap => ruff_linter__rules__ruff__tests__RUF040_RUF040.py.snap} (71%) diff --git a/crates/ruff_linter/resources/test/fixtures/ruff/RUF035.py b/crates/ruff_linter/resources/test/fixtures/ruff/RUF040.py similarity index 100% rename from crates/ruff_linter/resources/test/fixtures/ruff/RUF035.py rename to crates/ruff_linter/resources/test/fixtures/ruff/RUF040.py diff --git a/crates/ruff_linter/src/codes.rs b/crates/ruff_linter/src/codes.rs index 01b7954f1150a0..c0d21202ce5e5a 100644 --- a/crates/ruff_linter/src/codes.rs +++ b/crates/ruff_linter/src/codes.rs @@ -965,7 +965,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Ruff, "032") => (RuleGroup::Preview, rules::ruff::rules::DecimalFromFloatLiteral), (Ruff, "033") => (RuleGroup::Preview, rules::ruff::rules::PostInitDefault), (Ruff, "034") => (RuleGroup::Preview, rules::ruff::rules::UselessIfElse), - (Ruff, "035") => (RuleGroup::Preview, rules::ruff::rules::NonStringLiteralAsAssertMessage), + (Ruff, "040") => (RuleGroup::Preview, rules::ruff::rules::NonStringLiteralAsAssertMessage), (Ruff, "100") => (RuleGroup::Stable, rules::ruff::rules::UnusedNOQA), (Ruff, "101") => (RuleGroup::Stable, rules::ruff::rules::RedirectedNOQA), diff --git a/crates/ruff_linter/src/rules/ruff/mod.rs b/crates/ruff_linter/src/rules/ruff/mod.rs index 3576ea2f7aa25f..d9fb9938e6e3c6 100644 --- a/crates/ruff_linter/src/rules/ruff/mod.rs +++ b/crates/ruff_linter/src/rules/ruff/mod.rs @@ -62,7 +62,7 @@ mod tests { #[test_case(Rule::UselessIfElse, Path::new("RUF034.py"))] #[test_case(Rule::RedirectedNOQA, Path::new("RUF101.py"))] #[test_case(Rule::PostInitDefault, Path::new("RUF033.py"))] - #[test_case(Rule::NonStringLiteralAsAssertMessage, Path::new("RUF035.py"))] + #[test_case(Rule::NonStringLiteralAsAssertMessage, Path::new("RUF040.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( diff --git a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs index bc328eb458d8fc..bc245f4281cadf 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs @@ -36,7 +36,7 @@ impl Violation for NonStringLiteralAsAssertMessage { } } -/// RUF035 +/// RUF040 pub(crate) fn non_string_literal_as_assert_message(checker: &mut Checker, stmt: &StmtAssert) { let Some(message) = stmt.msg.as_deref() else { return; diff --git a/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap b/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF040_RUF040.py.snap similarity index 71% rename from crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap rename to crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF040_RUF040.py.snap index ac5fb734c74ec0..bbac23424e93f1 100644 --- a/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF035_RUF035.py.snap +++ b/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__RUF040_RUF040.py.snap @@ -2,12 +2,12 @@ source: crates/ruff_linter/src/rules/ruff/mod.rs snapshot_kind: text --- -RUF035.py:3:21: RUF035 Non-string literal used as assert message +RUF040.py:3:21: RUF040 Non-string literal used as assert message | 1 | fruits = ["apples", "plums", "pear"] 2 | fruits.filter(lambda fruit: fruit.startwith("p")) 3 | assert len(fruits), 2 - | ^ RUF035 + | ^ RUF040 4 | 5 | assert True, "always true" | diff --git a/ruff.schema.json b/ruff.schema.json index f0540092a85741..6b3a650a2ca457 100644 --- a/ruff.schema.json +++ b/ruff.schema.json @@ -3816,7 +3816,8 @@ "RUF032", "RUF033", "RUF034", - "RUF035", + "RUF04", + "RUF040", "RUF1", "RUF10", "RUF100", From eeb8dd6784e8c6228f92fbfbf9a35c4082cb1308 Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Mon, 25 Nov 2024 17:47:55 +0100 Subject: [PATCH 6/7] Changed rule name --- .../src/checkers/ast/analyze/statement.rs | 4 ++-- crates/ruff_linter/src/codes.rs | 2 +- crates/ruff_linter/src/rules/ruff/mod.rs | 2 +- ...=> invalid_assert_message_literal_argument.rs} | 15 +++++++-------- crates/ruff_linter/src/rules/ruff/rules/mod.rs | 5 +++-- 5 files changed, 14 insertions(+), 14 deletions(-) rename crates/ruff_linter/src/rules/ruff/rules/{non_string_literal_as_assert_message.rs => invalid_assert_message_literal_argument.rs} (70%) diff --git a/crates/ruff_linter/src/checkers/ast/analyze/statement.rs b/crates/ruff_linter/src/checkers/ast/analyze/statement.rs index 3fd3fdda3232ac..2845a59b2778a1 100644 --- a/crates/ruff_linter/src/checkers/ast/analyze/statement.rs +++ b/crates/ruff_linter/src/checkers/ast/analyze/statement.rs @@ -1268,8 +1268,8 @@ pub(crate) fn statement(stmt: &Stmt, checker: &mut Checker) { if checker.enabled(Rule::AssertWithPrintMessage) { ruff::rules::assert_with_print_message(checker, assert_stmt); } - if checker.enabled(Rule::NonStringLiteralAsAssertMessage) { - ruff::rules::non_string_literal_as_assert_message(checker, assert_stmt); + if checker.enabled(Rule::InvalidAssertMessageLiteralArgument) { + ruff::rules::invalid_assert_message_literal_argument(checker, assert_stmt); } } Stmt::With( diff --git a/crates/ruff_linter/src/codes.rs b/crates/ruff_linter/src/codes.rs index 135f36202e8412..0c4cfb59f3e09a 100644 --- a/crates/ruff_linter/src/codes.rs +++ b/crates/ruff_linter/src/codes.rs @@ -977,7 +977,7 @@ pub fn code_to_rule(linter: Linter, code: &str) -> Option<(RuleGroup, Rule)> { (Ruff, "038") => (RuleGroup::Preview, rules::ruff::rules::RedundantBoolLiteral), (Ruff, "048") => (RuleGroup::Preview, rules::ruff::rules::MapIntVersionParsing), (Ruff, "039") => (RuleGroup::Preview, rules::ruff::rules::UnrawRePattern), - (Ruff, "040") => (RuleGroup::Preview, rules::ruff::rules::NonStringLiteralAsAssertMessage), + (Ruff, "040") => (RuleGroup::Preview, rules::ruff::rules::InvalidAssertMessageLiteralArgument), (Ruff, "100") => (RuleGroup::Stable, rules::ruff::rules::UnusedNOQA), (Ruff, "101") => (RuleGroup::Stable, rules::ruff::rules::RedirectedNOQA), diff --git a/crates/ruff_linter/src/rules/ruff/mod.rs b/crates/ruff_linter/src/rules/ruff/mod.rs index bc974de00a1956..7cf00b7ed66d83 100644 --- a/crates/ruff_linter/src/rules/ruff/mod.rs +++ b/crates/ruff_linter/src/rules/ruff/mod.rs @@ -66,7 +66,7 @@ mod tests { #[test_case(Rule::NoneNotAtEndOfUnion, Path::new("RUF036.pyi"))] #[test_case(Rule::RedundantBoolLiteral, Path::new("RUF038.py"))] #[test_case(Rule::RedundantBoolLiteral, Path::new("RUF038.pyi"))] - #[test_case(Rule::NonStringLiteralAsAssertMessage, Path::new("RUF040.py"))] + #[test_case(Rule::InvalidAssertMessageLiteralArgument, Path::new("RUF040.py"))] fn rules(rule_code: Rule, path: &Path) -> Result<()> { let snapshot = format!("{}_{}", rule_code.noqa_code(), path.to_string_lossy()); let diagnostics = test_path( diff --git a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs b/crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs similarity index 70% rename from crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs rename to crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs index bc245f4281cadf..926f0836bef164 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/non_string_literal_as_assert_message.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs @@ -6,12 +6,11 @@ use ruff_text_size::Ranged; use crate::checkers::ast::Checker; /// ## What it does -/// Checks for uses of non-string literal as assert message. +/// Checks for invalid use of literals in assert message argument. /// /// ## Why is this bad? -/// Non-string literal in assert message does not provide any useful -/// information and is likely an unitentional use of `assert_equal(expr, expr)` -/// from other languages. +/// An assert message which is a non-string literal was likely intended +/// to be used in a comparison assertion, rather than as a message. /// /// ## Example /// ```python @@ -27,9 +26,9 @@ use crate::checkers::ast::Checker; /// assert len(fruits) == 2 /// ``` #[violation] -pub struct NonStringLiteralAsAssertMessage; +pub struct InvalidAssertMessageLiteralArgument; -impl Violation for NonStringLiteralAsAssertMessage { +impl Violation for InvalidAssertMessageLiteralArgument { #[derive_message_formats] fn message(&self) -> String { "Non-string literal used as assert message".to_string() @@ -37,7 +36,7 @@ impl Violation for NonStringLiteralAsAssertMessage { } /// RUF040 -pub(crate) fn non_string_literal_as_assert_message(checker: &mut Checker, stmt: &StmtAssert) { +pub(crate) fn invalid_assert_message_literal_argument(checker: &mut Checker, stmt: &StmtAssert) { let Some(message) = stmt.msg.as_deref() else { return; }; @@ -53,7 +52,7 @@ pub(crate) fn non_string_literal_as_assert_message(checker: &mut Checker, stmt: } checker.diagnostics.push(Diagnostic::new( - NonStringLiteralAsAssertMessage, + InvalidAssertMessageLiteralArgument, message.range(), )); } diff --git a/crates/ruff_linter/src/rules/ruff/rules/mod.rs b/crates/ruff_linter/src/rules/ruff/rules/mod.rs index ad8cb0b720de43..449042ba7bd189 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/mod.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/mod.rs @@ -9,6 +9,7 @@ pub(crate) use explicit_f_string_type_conversion::*; pub(crate) use function_call_in_dataclass_default::*; pub(crate) use implicit_optional::*; pub(crate) use incorrectly_parenthesized_tuple_in_subscript::*; +pub(crate) use invalid_assert_message_literal_argument::*; pub(crate) use invalid_formatter_suppression_comment::*; pub(crate) use invalid_index_type::*; pub(crate) use invalid_pyproject_toml::*; @@ -38,6 +39,7 @@ pub(crate) use unused_noqa::*; pub(crate) use useless_if_else::*; pub(crate) use zip_instead_of_pairwise::*; + mod ambiguous_unicode_character; mod assert_with_print_message; mod assignment_in_assert; @@ -51,6 +53,7 @@ mod function_call_in_dataclass_default; mod helpers; mod implicit_optional; mod incorrectly_parenthesized_tuple_in_subscript; +mod invalid_assert_message_literal_argument; mod invalid_formatter_suppression_comment; mod invalid_index_type; mod invalid_pyproject_toml; @@ -88,6 +91,4 @@ pub(crate) enum Context { Docstring, Comment, } -pub(crate) use non_string_literal_as_assert_message::*; -mod non_string_literal_as_assert_message; From ca0aa0fbf7d4893b432d964e5622af6cb4557d5f Mon Sep 17 00:00:00 2001 From: Lokejoke Date: Mon, 25 Nov 2024 17:54:10 +0100 Subject: [PATCH 7/7] Bytes back in query --- .../rules/ruff/rules/invalid_assert_message_literal_argument.rs | 1 + crates/ruff_linter/src/rules/ruff/rules/mod.rs | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs b/crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs index 926f0836bef164..ddb72df5450cbf 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/invalid_assert_message_literal_argument.rs @@ -47,6 +47,7 @@ pub(crate) fn invalid_assert_message_literal_argument(checker: &mut Checker, stm | Expr::BooleanLiteral(_) | Expr::NoneLiteral(_) | Expr::EllipsisLiteral(_) + | Expr::BytesLiteral(_) ) { return; } diff --git a/crates/ruff_linter/src/rules/ruff/rules/mod.rs b/crates/ruff_linter/src/rules/ruff/rules/mod.rs index 449042ba7bd189..95f79145d55b8e 100644 --- a/crates/ruff_linter/src/rules/ruff/rules/mod.rs +++ b/crates/ruff_linter/src/rules/ruff/rules/mod.rs @@ -39,7 +39,6 @@ pub(crate) use unused_noqa::*; pub(crate) use useless_if_else::*; pub(crate) use zip_instead_of_pairwise::*; - mod ambiguous_unicode_character; mod assert_with_print_message; mod assignment_in_assert; @@ -91,4 +90,3 @@ pub(crate) enum Context { Docstring, Comment, } -