diff --git a/its/ruling/src/test/resources/expected/python-S1656.json b/its/ruling/src/test/resources/expected/python-S1656.json index 6331716050..5186685b7b 100644 --- a/its/ruling/src/test/resources/expected/python-S1656.json +++ b/its/ruling/src/test/resources/expected/python-S1656.json @@ -28,16 +28,10 @@ 278, 289, ], -'project:tensorflow/python/autograph/pyct/ast_util.py':[ -171, -], 'project:tensorflow/python/autograph/pyct/static_analysis/reaching_definitions_test.py':[ 170, 171, ], -'project:tensorflow/python/autograph/pyct/templates.py':[ -213, -], 'project:tensorflow/python/keras/distribute/keras_correctness_test_base.py':[ 611, ], @@ -45,9 +39,6 @@ 129, 254, ], -'project:tensorflow/python/ops/script_ops.py':[ -525, -], 'project:tensorflow/python/training/tracking/tracking_test.py':[ 60, ], diff --git a/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java b/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java index a41853d96c..7055195258 100644 --- a/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java +++ b/python-checks/src/main/java/org/sonar/python/checks/SelfAssignmentCheck.java @@ -31,6 +31,7 @@ import org.sonar.plugins.python.api.tree.AssignmentStatement; import org.sonar.plugins.python.api.tree.CallExpression; import org.sonar.plugins.python.api.tree.Expression; +import org.sonar.plugins.python.api.tree.ExpressionList; import org.sonar.plugins.python.api.tree.ImportFrom; import org.sonar.plugins.python.api.tree.ImportName; import org.sonar.plugins.python.api.tree.Name; @@ -58,7 +59,7 @@ public void initialize(Context context) { context.registerSyntaxNodeConsumer(Tree.Kind.IMPORT_NAME, ctx -> ((ImportName) ctx.syntaxNode()).modules().forEach(this::addImportedName)); - context.registerSyntaxNodeConsumer(Tree.Kind.ASSIGNMENT_STMT, this::checkAssignement); + context.registerSyntaxNodeConsumer(Tree.Kind.ASSIGNMENT_STMT, this::checkAssignment); context.registerSyntaxNodeConsumer(Tree.Kind.ANNOTATED_ASSIGNMENT, this::checkAnnotatedAssignment); @@ -72,12 +73,12 @@ private static void checkAssignmentExpression(SubscriptionContext ctx) { } } - private void checkAssignement(SubscriptionContext ctx) { + private void checkAssignment(SubscriptionContext ctx) { AssignmentStatement assignment = (AssignmentStatement) ctx.syntaxNode(); Expression assignedValue = assignment.assignedValue(); for (int i = 0; i < assignment.lhsExpressions().size(); i++) { - List expressions = assignment.lhsExpressions().get(i).expressions(); - if (expressions.size() == 1 && CheckUtils.areEquivalent(assignedValue, expressions.get(0)) && !isException(assignment, assignedValue)) { + ExpressionList expressionList = assignment.lhsExpressions().get(i); + if (expressionList.commas().isEmpty() && CheckUtils.areEquivalent(assignedValue, expressionList.expressions().get(0)) && !isException(assignment, assignedValue)) { ctx.addIssue(assignment.equalTokens().get(i), MESSAGE); } } diff --git a/python-checks/src/test/resources/checks/selfAssignment.py b/python-checks/src/test/resources/checks/selfAssignment.py index b3c99a28c4..7033df6150 100644 --- a/python-checks/src/test/resources/checks/selfAssignment.py +++ b/python-checks/src/test/resources/checks/selfAssignment.py @@ -59,3 +59,9 @@ def assignment_expression(): pass if (b:=foo()): b = b # Noncompliant + +def unpacking(): + x = [1] + x, = x # OK + y, = x = x # Noncompliant +# ^