From ff28b1e480342af98e297ea5669cf94075070a23 Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Fri, 12 Apr 2024 09:51:04 -0400 Subject: [PATCH] Avoid non-augmented-assignment for reversed, non-commutative operators --- .../pylint/non_augmented_assignment.py | 2 + .../pylint/rules/non_augmented_assignment.rs | 32 +- ...__PLR6104_non_augmented_assignment.py.snap | 619 +++++++++--------- 3 files changed, 340 insertions(+), 313 deletions(-) diff --git a/crates/ruff_linter/resources/test/fixtures/pylint/non_augmented_assignment.py b/crates/ruff_linter/resources/test/fixtures/pylint/non_augmented_assignment.py index 41aee933843d6..3c3a6778eb4d3 100644 --- a/crates/ruff_linter/resources/test/fixtures/pylint/non_augmented_assignment.py +++ b/crates/ruff_linter/resources/test/fixtures/pylint/non_augmented_assignment.py @@ -18,6 +18,8 @@ a_list = a_list + ["to concat"] some_set = some_set | {"to concat"} to_multiply = to_multiply * 5 +to_multiply = 5 * to_multiply +to_multiply = to_multiply * to_multiply to_divide = to_divide / 5 to_divide = to_divide // 5 to_cube = to_cube**3 diff --git a/crates/ruff_linter/src/rules/pylint/rules/non_augmented_assignment.rs b/crates/ruff_linter/src/rules/pylint/rules/non_augmented_assignment.rs index 1a875934cbb5a..f00af88cd78a2 100644 --- a/crates/ruff_linter/src/rules/pylint/rules/non_augmented_assignment.rs +++ b/crates/ruff_linter/src/rules/pylint/rules/non_augmented_assignment.rs @@ -85,14 +85,11 @@ pub(crate) fn non_augmented_assignment(checker: &mut Checker, assign: &ast::Stmt return; }; + let operator = AugmentedOperator::from(value.op); + // Match, e.g., `x = x + 1`. if ComparableExpr::from(target) == ComparableExpr::from(&value.left) { - let mut diagnostic = Diagnostic::new( - NonAugmentedAssignment { - operator: AugmentedOperator::from(value.op), - }, - assign.range(), - ); + let mut diagnostic = Diagnostic::new(NonAugmentedAssignment { operator }, assign.range()); diagnostic.set_fix(Fix::unsafe_edit(augmented_assignment( checker.generator(), target, @@ -104,14 +101,11 @@ pub(crate) fn non_augmented_assignment(checker: &mut Checker, assign: &ast::Stmt return; } - // Match, e.g., `x = 1 + x`. - if ComparableExpr::from(target) == ComparableExpr::from(&value.right) { - let mut diagnostic = Diagnostic::new( - NonAugmentedAssignment { - operator: AugmentedOperator::from(value.op), - }, - assign.range(), - ); + // If the operator is commutative, match, e.g., `x = 1 + x`. + if operator.is_commutative() + && ComparableExpr::from(target) == ComparableExpr::from(&value.right) + { + let mut diagnostic = Diagnostic::new(NonAugmentedAssignment { operator }, assign.range()); diagnostic.set_fix(Fix::unsafe_edit(augmented_assignment( checker.generator(), target, @@ -161,6 +155,16 @@ enum AugmentedOperator { Sub, } +impl AugmentedOperator { + /// Returns `true` if the operator is commutative. + fn is_commutative(self) -> bool { + matches!( + self, + Self::Add | Self::BitAnd | Self::BitOr | Self::BitXor | Self::Mult + ) + } +} + impl From for AugmentedOperator { fn from(value: Operator) -> Self { match value { diff --git a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6104_non_augmented_assignment.py.snap b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6104_non_augmented_assignment.py.snap index 9e2557b9ed7c8..a676c83cb8bae 100644 --- a/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6104_non_augmented_assignment.py.snap +++ b/crates/ruff_linter/src/rules/pylint/snapshots/ruff_linter__rules__pylint__tests__PLR6104_non_augmented_assignment.py.snap @@ -61,7 +61,7 @@ non_augmented_assignment.py:18:1: PLR6104 [*] Use `+=` to perform an augmented a 18 |+a_list += ["to concat"] 19 19 | some_set = some_set | {"to concat"} 20 20 | to_multiply = to_multiply * 5 -21 21 | to_divide = to_divide / 5 +21 21 | to_multiply = 5 * to_multiply non_augmented_assignment.py:19:1: PLR6104 [*] Use `|=` to perform an augmented assignment directly | @@ -70,7 +70,7 @@ non_augmented_assignment.py:19:1: PLR6104 [*] Use `|=` to perform an augmented a 19 | some_set = some_set | {"to concat"} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 20 | to_multiply = to_multiply * 5 -21 | to_divide = to_divide / 5 +21 | to_multiply = 5 * to_multiply | = help: Replace with augmented assignment @@ -81,8 +81,8 @@ non_augmented_assignment.py:19:1: PLR6104 [*] Use `|=` to perform an augmented a 19 |-some_set = some_set | {"to concat"} 19 |+some_set |= {"to concat"} 20 20 | to_multiply = to_multiply * 5 -21 21 | to_divide = to_divide / 5 -22 22 | to_divide = to_divide // 5 +21 21 | to_multiply = 5 * to_multiply +22 22 | to_multiply = to_multiply * to_multiply non_augmented_assignment.py:20:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly | @@ -90,8 +90,8 @@ non_augmented_assignment.py:20:1: PLR6104 [*] Use `*=` to perform an augmented a 19 | some_set = some_set | {"to concat"} 20 | to_multiply = to_multiply * 5 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -21 | to_divide = to_divide / 5 -22 | to_divide = to_divide // 5 +21 | to_multiply = 5 * to_multiply +22 | to_multiply = to_multiply * to_multiply | = help: Replace with augmented assignment @@ -101,18 +101,18 @@ non_augmented_assignment.py:20:1: PLR6104 [*] Use `*=` to perform an augmented a 19 19 | some_set = some_set | {"to concat"} 20 |-to_multiply = to_multiply * 5 20 |+to_multiply *= 5 -21 21 | to_divide = to_divide / 5 -22 22 | to_divide = to_divide // 5 -23 23 | to_cube = to_cube**3 +21 21 | to_multiply = 5 * to_multiply +22 22 | to_multiply = to_multiply * to_multiply +23 23 | to_divide = to_divide / 5 -non_augmented_assignment.py:21:1: PLR6104 [*] Use `/=` to perform an augmented assignment directly +non_augmented_assignment.py:21:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly | 19 | some_set = some_set | {"to concat"} 20 | to_multiply = to_multiply * 5 -21 | to_divide = to_divide / 5 - | ^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -22 | to_divide = to_divide // 5 -23 | to_cube = to_cube**3 +21 | to_multiply = 5 * to_multiply + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 +22 | to_multiply = to_multiply * to_multiply +23 | to_divide = to_divide / 5 | = help: Replace with augmented assignment @@ -120,399 +120,420 @@ non_augmented_assignment.py:21:1: PLR6104 [*] Use `/=` to perform an augmented a 18 18 | a_list = a_list + ["to concat"] 19 19 | some_set = some_set | {"to concat"} 20 20 | to_multiply = to_multiply * 5 -21 |-to_divide = to_divide / 5 - 21 |+to_divide /= 5 -22 22 | to_divide = to_divide // 5 -23 23 | to_cube = to_cube**3 -24 24 | to_cube = 3**to_cube +21 |-to_multiply = 5 * to_multiply + 21 |+to_multiply *= 5 +22 22 | to_multiply = to_multiply * to_multiply +23 23 | to_divide = to_divide / 5 +24 24 | to_divide = to_divide // 5 -non_augmented_assignment.py:22:1: PLR6104 [*] Use `//=` to perform an augmented assignment directly +non_augmented_assignment.py:22:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly | 20 | to_multiply = to_multiply * 5 -21 | to_divide = to_divide / 5 -22 | to_divide = to_divide // 5 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -23 | to_cube = to_cube**3 -24 | to_cube = 3**to_cube +21 | to_multiply = 5 * to_multiply +22 | to_multiply = to_multiply * to_multiply + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 +23 | to_divide = to_divide / 5 +24 | to_divide = to_divide // 5 | = help: Replace with augmented assignment ℹ Unsafe fix 19 19 | some_set = some_set | {"to concat"} 20 20 | to_multiply = to_multiply * 5 -21 21 | to_divide = to_divide / 5 -22 |-to_divide = to_divide // 5 - 22 |+to_divide //= 5 -23 23 | to_cube = to_cube**3 -24 24 | to_cube = 3**to_cube -25 25 | to_cube = to_cube**to_cube - -non_augmented_assignment.py:23:1: PLR6104 [*] Use `**=` to perform an augmented assignment directly - | -21 | to_divide = to_divide / 5 -22 | to_divide = to_divide // 5 -23 | to_cube = to_cube**3 - | ^^^^^^^^^^^^^^^^^^^^ PLR6104 -24 | to_cube = 3**to_cube -25 | to_cube = to_cube**to_cube +21 21 | to_multiply = 5 * to_multiply +22 |-to_multiply = to_multiply * to_multiply + 22 |+to_multiply *= to_multiply +23 23 | to_divide = to_divide / 5 +24 24 | to_divide = to_divide // 5 +25 25 | to_cube = to_cube**3 + +non_augmented_assignment.py:23:1: PLR6104 [*] Use `/=` to perform an augmented assignment directly + | +21 | to_multiply = 5 * to_multiply +22 | to_multiply = to_multiply * to_multiply +23 | to_divide = to_divide / 5 + | ^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 +24 | to_divide = to_divide // 5 +25 | to_cube = to_cube**3 | = help: Replace with augmented assignment ℹ Unsafe fix 20 20 | to_multiply = to_multiply * 5 -21 21 | to_divide = to_divide / 5 -22 22 | to_divide = to_divide // 5 -23 |-to_cube = to_cube**3 - 23 |+to_cube **= 3 -24 24 | to_cube = 3**to_cube -25 25 | to_cube = to_cube**to_cube -26 26 | timeDiffSeconds = timeDiffSeconds % 60 - -non_augmented_assignment.py:24:1: PLR6104 [*] Use `**=` to perform an augmented assignment directly - | -22 | to_divide = to_divide // 5 -23 | to_cube = to_cube**3 -24 | to_cube = 3**to_cube - | ^^^^^^^^^^^^^^^^^^^^ PLR6104 -25 | to_cube = to_cube**to_cube -26 | timeDiffSeconds = timeDiffSeconds % 60 +21 21 | to_multiply = 5 * to_multiply +22 22 | to_multiply = to_multiply * to_multiply +23 |-to_divide = to_divide / 5 + 23 |+to_divide /= 5 +24 24 | to_divide = to_divide // 5 +25 25 | to_cube = to_cube**3 +26 26 | to_cube = 3**to_cube + +non_augmented_assignment.py:24:1: PLR6104 [*] Use `//=` to perform an augmented assignment directly + | +22 | to_multiply = to_multiply * to_multiply +23 | to_divide = to_divide / 5 +24 | to_divide = to_divide // 5 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 +25 | to_cube = to_cube**3 +26 | to_cube = 3**to_cube | = help: Replace with augmented assignment ℹ Unsafe fix -21 21 | to_divide = to_divide / 5 -22 22 | to_divide = to_divide // 5 -23 23 | to_cube = to_cube**3 -24 |-to_cube = 3**to_cube - 24 |+to_cube **= 3 -25 25 | to_cube = to_cube**to_cube -26 26 | timeDiffSeconds = timeDiffSeconds % 60 -27 27 | flags = flags & 0x1 +21 21 | to_multiply = 5 * to_multiply +22 22 | to_multiply = to_multiply * to_multiply +23 23 | to_divide = to_divide / 5 +24 |-to_divide = to_divide // 5 + 24 |+to_divide //= 5 +25 25 | to_cube = to_cube**3 +26 26 | to_cube = 3**to_cube +27 27 | to_cube = to_cube**to_cube non_augmented_assignment.py:25:1: PLR6104 [*] Use `**=` to perform an augmented assignment directly | -23 | to_cube = to_cube**3 -24 | to_cube = 3**to_cube -25 | to_cube = to_cube**to_cube +23 | to_divide = to_divide / 5 +24 | to_divide = to_divide // 5 +25 | to_cube = to_cube**3 + | ^^^^^^^^^^^^^^^^^^^^ PLR6104 +26 | to_cube = 3**to_cube +27 | to_cube = to_cube**to_cube + | + = help: Replace with augmented assignment + +ℹ Unsafe fix +22 22 | to_multiply = to_multiply * to_multiply +23 23 | to_divide = to_divide / 5 +24 24 | to_divide = to_divide // 5 +25 |-to_cube = to_cube**3 + 25 |+to_cube **= 3 +26 26 | to_cube = 3**to_cube +27 27 | to_cube = to_cube**to_cube +28 28 | timeDiffSeconds = timeDiffSeconds % 60 + +non_augmented_assignment.py:27:1: PLR6104 [*] Use `**=` to perform an augmented assignment directly + | +25 | to_cube = to_cube**3 +26 | to_cube = 3**to_cube +27 | to_cube = to_cube**to_cube | ^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -26 | timeDiffSeconds = timeDiffSeconds % 60 -27 | flags = flags & 0x1 +28 | timeDiffSeconds = timeDiffSeconds % 60 +29 | flags = flags & 0x1 | = help: Replace with augmented assignment ℹ Unsafe fix -22 22 | to_divide = to_divide // 5 -23 23 | to_cube = to_cube**3 -24 24 | to_cube = 3**to_cube -25 |-to_cube = to_cube**to_cube - 25 |+to_cube **= to_cube -26 26 | timeDiffSeconds = timeDiffSeconds % 60 -27 27 | flags = flags & 0x1 -28 28 | flags = flags | 0x1 - -non_augmented_assignment.py:26:1: PLR6104 [*] Use `%=` to perform an augmented assignment directly - | -24 | to_cube = 3**to_cube -25 | to_cube = to_cube**to_cube -26 | timeDiffSeconds = timeDiffSeconds % 60 +24 24 | to_divide = to_divide // 5 +25 25 | to_cube = to_cube**3 +26 26 | to_cube = 3**to_cube +27 |-to_cube = to_cube**to_cube + 27 |+to_cube **= to_cube +28 28 | timeDiffSeconds = timeDiffSeconds % 60 +29 29 | flags = flags & 0x1 +30 30 | flags = flags | 0x1 + +non_augmented_assignment.py:28:1: PLR6104 [*] Use `%=` to perform an augmented assignment directly + | +26 | to_cube = 3**to_cube +27 | to_cube = to_cube**to_cube +28 | timeDiffSeconds = timeDiffSeconds % 60 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -27 | flags = flags & 0x1 -28 | flags = flags | 0x1 +29 | flags = flags & 0x1 +30 | flags = flags | 0x1 | = help: Replace with augmented assignment ℹ Unsafe fix -23 23 | to_cube = to_cube**3 -24 24 | to_cube = 3**to_cube -25 25 | to_cube = to_cube**to_cube -26 |-timeDiffSeconds = timeDiffSeconds % 60 - 26 |+timeDiffSeconds %= 60 -27 27 | flags = flags & 0x1 -28 28 | flags = flags | 0x1 -29 29 | flags = flags ^ 0x1 - -non_augmented_assignment.py:27:1: PLR6104 [*] Use `&=` to perform an augmented assignment directly - | -25 | to_cube = to_cube**to_cube -26 | timeDiffSeconds = timeDiffSeconds % 60 -27 | flags = flags & 0x1 +25 25 | to_cube = to_cube**3 +26 26 | to_cube = 3**to_cube +27 27 | to_cube = to_cube**to_cube +28 |-timeDiffSeconds = timeDiffSeconds % 60 + 28 |+timeDiffSeconds %= 60 +29 29 | flags = flags & 0x1 +30 30 | flags = flags | 0x1 +31 31 | flags = flags ^ 0x1 + +non_augmented_assignment.py:29:1: PLR6104 [*] Use `&=` to perform an augmented assignment directly + | +27 | to_cube = to_cube**to_cube +28 | timeDiffSeconds = timeDiffSeconds % 60 +29 | flags = flags & 0x1 | ^^^^^^^^^^^^^^^^^^^ PLR6104 -28 | flags = flags | 0x1 -29 | flags = flags ^ 0x1 +30 | flags = flags | 0x1 +31 | flags = flags ^ 0x1 | = help: Replace with augmented assignment ℹ Unsafe fix -24 24 | to_cube = 3**to_cube -25 25 | to_cube = to_cube**to_cube -26 26 | timeDiffSeconds = timeDiffSeconds % 60 -27 |-flags = flags & 0x1 - 27 |+flags &= 1 -28 28 | flags = flags | 0x1 -29 29 | flags = flags ^ 0x1 -30 30 | flags = flags << 1 - -non_augmented_assignment.py:28:1: PLR6104 [*] Use `|=` to perform an augmented assignment directly - | -26 | timeDiffSeconds = timeDiffSeconds % 60 -27 | flags = flags & 0x1 -28 | flags = flags | 0x1 +26 26 | to_cube = 3**to_cube +27 27 | to_cube = to_cube**to_cube +28 28 | timeDiffSeconds = timeDiffSeconds % 60 +29 |-flags = flags & 0x1 + 29 |+flags &= 1 +30 30 | flags = flags | 0x1 +31 31 | flags = flags ^ 0x1 +32 32 | flags = flags << 1 + +non_augmented_assignment.py:30:1: PLR6104 [*] Use `|=` to perform an augmented assignment directly + | +28 | timeDiffSeconds = timeDiffSeconds % 60 +29 | flags = flags & 0x1 +30 | flags = flags | 0x1 | ^^^^^^^^^^^^^^^^^^^ PLR6104 -29 | flags = flags ^ 0x1 -30 | flags = flags << 1 +31 | flags = flags ^ 0x1 +32 | flags = flags << 1 | = help: Replace with augmented assignment ℹ Unsafe fix -25 25 | to_cube = to_cube**to_cube -26 26 | timeDiffSeconds = timeDiffSeconds % 60 -27 27 | flags = flags & 0x1 -28 |-flags = flags | 0x1 - 28 |+flags |= 1 -29 29 | flags = flags ^ 0x1 -30 30 | flags = flags << 1 -31 31 | flags = flags >> 1 - -non_augmented_assignment.py:29:1: PLR6104 [*] Use `^=` to perform an augmented assignment directly - | -27 | flags = flags & 0x1 -28 | flags = flags | 0x1 -29 | flags = flags ^ 0x1 +27 27 | to_cube = to_cube**to_cube +28 28 | timeDiffSeconds = timeDiffSeconds % 60 +29 29 | flags = flags & 0x1 +30 |-flags = flags | 0x1 + 30 |+flags |= 1 +31 31 | flags = flags ^ 0x1 +32 32 | flags = flags << 1 +33 33 | flags = flags >> 1 + +non_augmented_assignment.py:31:1: PLR6104 [*] Use `^=` to perform an augmented assignment directly + | +29 | flags = flags & 0x1 +30 | flags = flags | 0x1 +31 | flags = flags ^ 0x1 | ^^^^^^^^^^^^^^^^^^^ PLR6104 -30 | flags = flags << 1 -31 | flags = flags >> 1 +32 | flags = flags << 1 +33 | flags = flags >> 1 | = help: Replace with augmented assignment ℹ Unsafe fix -26 26 | timeDiffSeconds = timeDiffSeconds % 60 -27 27 | flags = flags & 0x1 -28 28 | flags = flags | 0x1 -29 |-flags = flags ^ 0x1 - 29 |+flags ^= 1 -30 30 | flags = flags << 1 -31 31 | flags = flags >> 1 -32 32 | mat1 = mat1 @ mat2 - -non_augmented_assignment.py:30:1: PLR6104 [*] Use `<<=` to perform an augmented assignment directly - | -28 | flags = flags | 0x1 -29 | flags = flags ^ 0x1 -30 | flags = flags << 1 +28 28 | timeDiffSeconds = timeDiffSeconds % 60 +29 29 | flags = flags & 0x1 +30 30 | flags = flags | 0x1 +31 |-flags = flags ^ 0x1 + 31 |+flags ^= 1 +32 32 | flags = flags << 1 +33 33 | flags = flags >> 1 +34 34 | mat1 = mat1 @ mat2 + +non_augmented_assignment.py:32:1: PLR6104 [*] Use `<<=` to perform an augmented assignment directly + | +30 | flags = flags | 0x1 +31 | flags = flags ^ 0x1 +32 | flags = flags << 1 | ^^^^^^^^^^^^^^^^^^ PLR6104 -31 | flags = flags >> 1 -32 | mat1 = mat1 @ mat2 +33 | flags = flags >> 1 +34 | mat1 = mat1 @ mat2 | = help: Replace with augmented assignment ℹ Unsafe fix -27 27 | flags = flags & 0x1 -28 28 | flags = flags | 0x1 -29 29 | flags = flags ^ 0x1 -30 |-flags = flags << 1 - 30 |+flags <<= 1 -31 31 | flags = flags >> 1 -32 32 | mat1 = mat1 @ mat2 -33 33 | a_list[1] = a_list[1] + 1 - -non_augmented_assignment.py:31:1: PLR6104 [*] Use `>>=` to perform an augmented assignment directly - | -29 | flags = flags ^ 0x1 -30 | flags = flags << 1 -31 | flags = flags >> 1 +29 29 | flags = flags & 0x1 +30 30 | flags = flags | 0x1 +31 31 | flags = flags ^ 0x1 +32 |-flags = flags << 1 + 32 |+flags <<= 1 +33 33 | flags = flags >> 1 +34 34 | mat1 = mat1 @ mat2 +35 35 | a_list[1] = a_list[1] + 1 + +non_augmented_assignment.py:33:1: PLR6104 [*] Use `>>=` to perform an augmented assignment directly + | +31 | flags = flags ^ 0x1 +32 | flags = flags << 1 +33 | flags = flags >> 1 | ^^^^^^^^^^^^^^^^^^ PLR6104 -32 | mat1 = mat1 @ mat2 -33 | a_list[1] = a_list[1] + 1 +34 | mat1 = mat1 @ mat2 +35 | a_list[1] = a_list[1] + 1 | = help: Replace with augmented assignment ℹ Unsafe fix -28 28 | flags = flags | 0x1 -29 29 | flags = flags ^ 0x1 -30 30 | flags = flags << 1 -31 |-flags = flags >> 1 - 31 |+flags >>= 1 -32 32 | mat1 = mat1 @ mat2 -33 33 | a_list[1] = a_list[1] + 1 -34 34 | - -non_augmented_assignment.py:32:1: PLR6104 [*] Use `@=` to perform an augmented assignment directly - | -30 | flags = flags << 1 -31 | flags = flags >> 1 -32 | mat1 = mat1 @ mat2 +30 30 | flags = flags | 0x1 +31 31 | flags = flags ^ 0x1 +32 32 | flags = flags << 1 +33 |-flags = flags >> 1 + 33 |+flags >>= 1 +34 34 | mat1 = mat1 @ mat2 +35 35 | a_list[1] = a_list[1] + 1 +36 36 | + +non_augmented_assignment.py:34:1: PLR6104 [*] Use `@=` to perform an augmented assignment directly + | +32 | flags = flags << 1 +33 | flags = flags >> 1 +34 | mat1 = mat1 @ mat2 | ^^^^^^^^^^^^^^^^^^ PLR6104 -33 | a_list[1] = a_list[1] + 1 +35 | a_list[1] = a_list[1] + 1 | = help: Replace with augmented assignment ℹ Unsafe fix -29 29 | flags = flags ^ 0x1 -30 30 | flags = flags << 1 -31 31 | flags = flags >> 1 -32 |-mat1 = mat1 @ mat2 - 32 |+mat1 @= mat2 -33 33 | a_list[1] = a_list[1] + 1 -34 34 | -35 35 | a_list[0:2] = a_list[0:2] * 3 - -non_augmented_assignment.py:33:1: PLR6104 [*] Use `+=` to perform an augmented assignment directly - | -31 | flags = flags >> 1 -32 | mat1 = mat1 @ mat2 -33 | a_list[1] = a_list[1] + 1 +31 31 | flags = flags ^ 0x1 +32 32 | flags = flags << 1 +33 33 | flags = flags >> 1 +34 |-mat1 = mat1 @ mat2 + 34 |+mat1 @= mat2 +35 35 | a_list[1] = a_list[1] + 1 +36 36 | +37 37 | a_list[0:2] = a_list[0:2] * 3 + +non_augmented_assignment.py:35:1: PLR6104 [*] Use `+=` to perform an augmented assignment directly + | +33 | flags = flags >> 1 +34 | mat1 = mat1 @ mat2 +35 | a_list[1] = a_list[1] + 1 | ^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -34 | -35 | a_list[0:2] = a_list[0:2] * 3 +36 | +37 | a_list[0:2] = a_list[0:2] * 3 | = help: Replace with augmented assignment ℹ Unsafe fix -30 30 | flags = flags << 1 -31 31 | flags = flags >> 1 -32 32 | mat1 = mat1 @ mat2 -33 |-a_list[1] = a_list[1] + 1 - 33 |+a_list[1] += 1 -34 34 | -35 35 | a_list[0:2] = a_list[0:2] * 3 -36 36 | a_list[:2] = a_list[:2] * 3 - -non_augmented_assignment.py:35:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly - | -33 | a_list[1] = a_list[1] + 1 -34 | -35 | a_list[0:2] = a_list[0:2] * 3 +32 32 | flags = flags << 1 +33 33 | flags = flags >> 1 +34 34 | mat1 = mat1 @ mat2 +35 |-a_list[1] = a_list[1] + 1 + 35 |+a_list[1] += 1 +36 36 | +37 37 | a_list[0:2] = a_list[0:2] * 3 +38 38 | a_list[:2] = a_list[:2] * 3 + +non_augmented_assignment.py:37:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly + | +35 | a_list[1] = a_list[1] + 1 +36 | +37 | a_list[0:2] = a_list[0:2] * 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -36 | a_list[:2] = a_list[:2] * 3 -37 | a_list[1:] = a_list[1:] * 3 +38 | a_list[:2] = a_list[:2] * 3 +39 | a_list[1:] = a_list[1:] * 3 | = help: Replace with augmented assignment ℹ Unsafe fix -32 32 | mat1 = mat1 @ mat2 -33 33 | a_list[1] = a_list[1] + 1 -34 34 | -35 |-a_list[0:2] = a_list[0:2] * 3 - 35 |+a_list[0:2] *= 3 -36 36 | a_list[:2] = a_list[:2] * 3 -37 37 | a_list[1:] = a_list[1:] * 3 -38 38 | a_list[:] = a_list[:] * 3 - -non_augmented_assignment.py:36:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly - | -35 | a_list[0:2] = a_list[0:2] * 3 -36 | a_list[:2] = a_list[:2] * 3 +34 34 | mat1 = mat1 @ mat2 +35 35 | a_list[1] = a_list[1] + 1 +36 36 | +37 |-a_list[0:2] = a_list[0:2] * 3 + 37 |+a_list[0:2] *= 3 +38 38 | a_list[:2] = a_list[:2] * 3 +39 39 | a_list[1:] = a_list[1:] * 3 +40 40 | a_list[:] = a_list[:] * 3 + +non_augmented_assignment.py:38:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly + | +37 | a_list[0:2] = a_list[0:2] * 3 +38 | a_list[:2] = a_list[:2] * 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -37 | a_list[1:] = a_list[1:] * 3 -38 | a_list[:] = a_list[:] * 3 +39 | a_list[1:] = a_list[1:] * 3 +40 | a_list[:] = a_list[:] * 3 | = help: Replace with augmented assignment ℹ Unsafe fix -33 33 | a_list[1] = a_list[1] + 1 -34 34 | -35 35 | a_list[0:2] = a_list[0:2] * 3 -36 |-a_list[:2] = a_list[:2] * 3 - 36 |+a_list[:2] *= 3 -37 37 | a_list[1:] = a_list[1:] * 3 -38 38 | a_list[:] = a_list[:] * 3 -39 39 | +35 35 | a_list[1] = a_list[1] + 1 +36 36 | +37 37 | a_list[0:2] = a_list[0:2] * 3 +38 |-a_list[:2] = a_list[:2] * 3 + 38 |+a_list[:2] *= 3 +39 39 | a_list[1:] = a_list[1:] * 3 +40 40 | a_list[:] = a_list[:] * 3 +41 41 | -non_augmented_assignment.py:37:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly +non_augmented_assignment.py:39:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly | -35 | a_list[0:2] = a_list[0:2] * 3 -36 | a_list[:2] = a_list[:2] * 3 -37 | a_list[1:] = a_list[1:] * 3 +37 | a_list[0:2] = a_list[0:2] * 3 +38 | a_list[:2] = a_list[:2] * 3 +39 | a_list[1:] = a_list[1:] * 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -38 | a_list[:] = a_list[:] * 3 +40 | a_list[:] = a_list[:] * 3 | = help: Replace with augmented assignment ℹ Unsafe fix -34 34 | -35 35 | a_list[0:2] = a_list[0:2] * 3 -36 36 | a_list[:2] = a_list[:2] * 3 -37 |-a_list[1:] = a_list[1:] * 3 - 37 |+a_list[1:] *= 3 -38 38 | a_list[:] = a_list[:] * 3 -39 39 | -40 40 | index = index * (index + 10) +36 36 | +37 37 | a_list[0:2] = a_list[0:2] * 3 +38 38 | a_list[:2] = a_list[:2] * 3 +39 |-a_list[1:] = a_list[1:] * 3 + 39 |+a_list[1:] *= 3 +40 40 | a_list[:] = a_list[:] * 3 +41 41 | +42 42 | index = index * (index + 10) -non_augmented_assignment.py:38:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly +non_augmented_assignment.py:40:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly | -36 | a_list[:2] = a_list[:2] * 3 -37 | a_list[1:] = a_list[1:] * 3 -38 | a_list[:] = a_list[:] * 3 +38 | a_list[:2] = a_list[:2] * 3 +39 | a_list[1:] = a_list[1:] * 3 +40 | a_list[:] = a_list[:] * 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 -39 | -40 | index = index * (index + 10) +41 | +42 | index = index * (index + 10) | = help: Replace with augmented assignment ℹ Unsafe fix -35 35 | a_list[0:2] = a_list[0:2] * 3 -36 36 | a_list[:2] = a_list[:2] * 3 -37 37 | a_list[1:] = a_list[1:] * 3 -38 |-a_list[:] = a_list[:] * 3 - 38 |+a_list[:] *= 3 -39 39 | -40 40 | index = index * (index + 10) +37 37 | a_list[0:2] = a_list[0:2] * 3 +38 38 | a_list[:2] = a_list[:2] * 3 +39 39 | a_list[1:] = a_list[1:] * 3 +40 |-a_list[:] = a_list[:] * 3 + 40 |+a_list[:] *= 3 41 41 | +42 42 | index = index * (index + 10) +43 43 | -non_augmented_assignment.py:40:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly +non_augmented_assignment.py:42:1: PLR6104 [*] Use `*=` to perform an augmented assignment directly | -38 | a_list[:] = a_list[:] * 3 -39 | -40 | index = index * (index + 10) +40 | a_list[:] = a_list[:] * 3 +41 | +42 | index = index * (index + 10) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PLR6104 | = help: Replace with augmented assignment ℹ Unsafe fix -37 37 | a_list[1:] = a_list[1:] * 3 -38 38 | a_list[:] = a_list[:] * 3 -39 39 | -40 |-index = index * (index + 10) - 40 |+index *= index + 10 +39 39 | a_list[1:] = a_list[1:] * 3 +40 40 | a_list[:] = a_list[:] * 3 41 41 | -42 42 | -43 43 | class T: +42 |-index = index * (index + 10) + 42 |+index *= index + 10 +43 43 | +44 44 | +45 45 | class T: -non_augmented_assignment.py:45:9: PLR6104 [*] Use `+=` to perform an augmented assignment directly +non_augmented_assignment.py:47:9: PLR6104 [*] Use `+=` to perform an augmented assignment directly | -43 | class T: -44 | def t(self): -45 | self.a = self.a + 1 +45 | class T: +46 | def t(self): +47 | self.a = self.a + 1 | ^^^^^^^^^^^^^^^^^^^ PLR6104 | = help: Replace with augmented assignment ℹ Unsafe fix -42 42 | -43 43 | class T: -44 44 | def t(self): -45 |- self.a = self.a + 1 - 45 |+ self.a += 1 -46 46 | -47 47 | -48 48 | obj = T() - -non_augmented_assignment.py:49:1: PLR6104 [*] Use `+=` to perform an augmented assignment directly - | -48 | obj = T() -49 | obj.a = obj.a + 1 +44 44 | +45 45 | class T: +46 46 | def t(self): +47 |- self.a = self.a + 1 + 47 |+ self.a += 1 +48 48 | +49 49 | +50 50 | obj = T() + +non_augmented_assignment.py:51:1: PLR6104 [*] Use `+=` to perform an augmented assignment directly + | +50 | obj = T() +51 | obj.a = obj.a + 1 | ^^^^^^^^^^^^^^^^^ PLR6104 -50 | -51 | # OK +52 | +53 | # OK | = help: Replace with augmented assignment ℹ Unsafe fix -46 46 | -47 47 | -48 48 | obj = T() -49 |-obj.a = obj.a + 1 - 49 |+obj.a += 1 -50 50 | -51 51 | # OK -52 52 | a_list[0] = a_list[:] * 3 +48 48 | +49 49 | +50 50 | obj = T() +51 |-obj.a = obj.a + 1 + 51 |+obj.a += 1 +52 52 | +53 53 | # OK +54 54 | a_list[0] = a_list[:] * 3