diff options
author | Daniƫl van Noord <13665637+DanielNoord@users.noreply.github.com> | 2021-12-21 14:58:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-21 14:58:52 +0100 |
commit | 52576b7552b68593a3ea28e20cd3751ccdc106d7 (patch) | |
tree | 74c246fa4a5f411fe14faa040ad159078e9b8455 | |
parent | 2a69387352bd1c941759faaa22458de3609b7627 (diff) | |
download | pylint-git-52576b7552b68593a3ea28e20cd3751ccdc106d7.tar.gz |
Fix ``used-before-assignment`` for assignment expressions in lambda (#5530)
-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, +) |