diff --git a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT018.py b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT018.py index 02dc99b2a7..f9261b8620 100644 --- a/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT018.py +++ b/crates/ruff/resources/test/fixtures/flake8_pytest_style/PT018.py @@ -23,7 +23,7 @@ def test_error(): """ # recursive case - assert not (a or not (b or c)) # note that we only reduce once here + assert not (a or not (b or c)) assert not (a or not (b and c)) # detected, but no autofix for messages diff --git a/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs b/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs index daef6dc0c5..733d3f5d64 100644 --- a/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs +++ b/crates/ruff/src/rules/flake8_pytest_style/rules/assertion.rs @@ -12,7 +12,7 @@ use rustpython_parser::ast::{ use ruff_macros::{define_violation, derive_message_formats}; -use crate::ast::helpers::unparse_stmt; +use crate::ast::helpers::{has_comments_in, unparse_stmt}; use crate::ast::types::Range; use crate::ast::visitor::Visitor; use crate::ast::{visitor, whitespace}; @@ -187,7 +187,7 @@ fn check_assert_in_except(name: &str, body: &[Stmt]) -> Vec { /// PT009 pub fn unittest_assertion( checker: &Checker, - call: &Expr, + expr: &Expr, func: &Expr, args: &[Expr], keywords: &[Keyword], @@ -198,7 +198,8 @@ pub fn unittest_assertion( // We're converting an expression to a statement, so avoid applying the fix if // the assertion is part of a larger expression. let fixable = checker.current_expr_parent().is_none() - && matches!(checker.current_stmt().node, StmtKind::Expr { .. }); + && matches!(checker.current_stmt().node, StmtKind::Expr { .. }) + && !has_comments_in(Range::from_located(expr), checker.locator); let mut diagnostic = Diagnostic::new( UnittestAssertion { assertion: unittest_assert.to_string(), @@ -210,8 +211,8 @@ pub fn unittest_assertion( if let Ok(stmt) = unittest_assert.generate_assert(args, keywords) { diagnostic.amend(Fix::replacement( unparse_stmt(&stmt, checker.stylist), - call.location, - call.end_location.unwrap(), + expr.location, + expr.end_location.unwrap(), )); } } @@ -434,7 +435,9 @@ fn fix_composite_condition(stmt: &Stmt, locator: &Locator, stylist: &Stylist) -> pub fn composite_condition(checker: &mut Checker, stmt: &Stmt, test: &Expr, msg: Option<&Expr>) { let composite = is_composite_condition(test); if matches!(composite, CompositionKind::Simple | CompositionKind::Mixed) { - let fixable = matches!(composite, CompositionKind::Simple) && msg.is_none(); + let fixable = matches!(composite, CompositionKind::Simple) + && msg.is_none() + && !has_comments_in(Range::from_located(stmt), checker.locator); let mut diagnostic = Diagnostic::new(CompositeAssertion { fixable }, Range::from_located(stmt)); if fixable && checker.patch(diagnostic.kind.rule()) {