diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | doc/whatsnew/2.13.rst | 5 | ||||
-rw-r--r-- | pylint/checkers/variables.py | 4 | ||||
-rw-r--r-- | tests/functional/u/undefined/undefined_variable_py38.py | 11 |
4 files changed, 21 insertions, 4 deletions
@@ -50,6 +50,11 @@ Release date: TBA * ``used-before-assignment`` now checks names in try blocks. +* Fixed false positive with ``used-before-assignment`` for assignment expressions + in lambda statements. + + Closes #5360, #3877 + * Some files in ``pylint.testutils`` were deprecated. In the future imports should be done from the ``pylint.testutils.functional`` namespace directly. diff --git a/doc/whatsnew/2.13.rst b/doc/whatsnew/2.13.rst index 05d4e495f..219aec512 100644 --- a/doc/whatsnew/2.13.rst +++ b/doc/whatsnew/2.13.rst @@ -86,6 +86,11 @@ Other Changes * ``used-before-assignment`` now checks names in try blocks. +* Fixed false positive with ``used-before-assignment`` for assignment expressions + in lambda statements. + + Closes #5360, #3877 + * Require Python ``3.6.2`` to run pylint. Closes #5065 diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index 40fc99b63..8e2f86839 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -1402,10 +1402,6 @@ class VariablesChecker(BaseChecker): "used-before-assignment", args=node.name, node=node ) - elif current_consumer.scope_type == "lambda": - self.add_message("undefined-variable", args=node.name, node=node) - return (VariableVisitConsumerAction.CONSUME, found_nodes) - elif self._is_only_type_assignment(node, defstmt): self.add_message("undefined-variable", args=node.name, node=node) return (VariableVisitConsumerAction.CONSUME, found_nodes) diff --git a/tests/functional/u/undefined/undefined_variable_py38.py b/tests/functional/u/undefined/undefined_variable_py38.py index 3c00bfd85..81fa19f52 100644 --- a/tests/functional/u/undefined/undefined_variable_py38.py +++ b/tests/functional/u/undefined/undefined_variable_py38.py @@ -97,3 +97,14 @@ print(assign_assign_4) COMPREHENSION_FIVE = {i: (else_assign_2 := i) if False else 0 for i in range(10)} print(else_assign_2) # [undefined-variable] + + +# Tests for assignment expressions in lambda statements + +things = [] +sorted_things = sorted( + things, + key=lambda thing: x_0 + if (x_0 := thing.this_value) < (x_1 := thing.that_value) + else x_1, +) |