summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>2021-12-21 14:58:52 +0100
committerGitHub <noreply@github.com>2021-12-21 14:58:52 +0100
commit52576b7552b68593a3ea28e20cd3751ccdc106d7 (patch)
tree74c246fa4a5f411fe14faa040ad159078e9b8455
parent2a69387352bd1c941759faaa22458de3609b7627 (diff)
downloadpylint-git-52576b7552b68593a3ea28e20cd3751ccdc106d7.tar.gz
Fix ``used-before-assignment`` for assignment expressions in lambda (#5530)
-rw-r--r--ChangeLog5
-rw-r--r--doc/whatsnew/2.13.rst5
-rw-r--r--pylint/checkers/variables.py4
-rw-r--r--tests/functional/u/undefined/undefined_variable_py38.py11
4 files changed, 21 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index f1b8c1aab..77e77dfe5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,
+)