summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniƫl van Noord <13665637+DanielNoord@users.noreply.github.com>2021-10-25 23:30:29 +0200
committerGitHub <noreply@github.com>2021-10-25 23:30:29 +0200
commit157091a014fb9a160682d250ef68c1114a505d4f (patch)
tree10b5801bb5023a921cf6da7599a82303afb39d0b
parent30743e0ffbf149246860a0d7ea4a1324c7a8ec00 (diff)
downloadpylint-git-157091a014fb9a160682d250ef68c1114a505d4f.tar.gz
Add tests for assignment expressions in function defaults (#5188)
* Add tests for assignment expressions in function defaults Ref #3688 * Upgrade astroid to 2.8.4 Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
-rw-r--r--ChangeLog5
-rw-r--r--doc/whatsnew/2.12.rst5
-rw-r--r--requirements_test_min.txt2
-rw-r--r--setup.cfg2
-rw-r--r--tests/functional/a/access/access_to_protected_members_typing.txt0
-rw-r--r--tests/functional/u/undefined/undefined_variable_py38.py33
-rw-r--r--tests/functional/u/undefined/undefined_variable_py38.txt4
-rw-r--r--tests/functional/u/unused/unused_variable_py38.py32
-rw-r--r--tests/functional/u/unused/unused_variable_py38.rc5
-rw-r--r--tests/functional/u/unused/unused_variable_py38.txt6
10 files changed, 91 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 732a62f35..541e6543f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -42,6 +42,11 @@ Release date: TBA
Closes #3771
+* ``undefined-variable`` and ``unused-variable`` now correctly trigger for assignment expressions
+ in functions defaults
+
+ Fixes part of #3688
+
* Fix bug with importing namespace packages with relative imports
Closes #2967 and #5131
diff --git a/doc/whatsnew/2.12.rst b/doc/whatsnew/2.12.rst
index af5b33a43..0573ddc50 100644
--- a/doc/whatsnew/2.12.rst
+++ b/doc/whatsnew/2.12.rst
@@ -86,6 +86,11 @@ Other Changes
Closes #3771
+* ``undefined-variable`` and ``unused-variable`` now correctly trigger for assignment expressions
+ in functions defaults
+
+ Fixes part of #3688
+
* Fix double emitting of ``not-callable`` on inferrable ``properties``
Closes #4426
diff --git a/requirements_test_min.txt b/requirements_test_min.txt
index 568d78b68..80c4e382f 100644
--- a/requirements_test_min.txt
+++ b/requirements_test_min.txt
@@ -1,5 +1,5 @@
-e .
# astroid dependency is also defined in setup.cfg
-astroid==2.8.3 # Pinned to a specific version for tests
+astroid==2.8.4 # Pinned to a specific version for tests
pytest~=6.2
pytest-benchmark~=3.4
diff --git a/setup.cfg b/setup.cfg
index 89071924a..bcbcbab55 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -44,7 +44,7 @@ project_urls =
packages = find:
install_requires =
platformdirs>=2.2.0
- astroid>=2.8.3,<2.9 # (You should also upgrade requirements_test_min.txt)
+ astroid>=2.8.4,<2.9 # (You should also upgrade requirements_test_min.txt)
isort>=4.2.5,<6
mccabe>=0.6,<0.7
toml>=0.9.2
diff --git a/tests/functional/a/access/access_to_protected_members_typing.txt b/tests/functional/a/access/access_to_protected_members_typing.txt
deleted file mode 100644
index e69de29bb..000000000
--- a/tests/functional/a/access/access_to_protected_members_typing.txt
+++ /dev/null
diff --git a/tests/functional/u/undefined/undefined_variable_py38.py b/tests/functional/u/undefined/undefined_variable_py38.py
index 818423c8e..950d17fb4 100644
--- a/tests/functional/u/undefined/undefined_variable_py38.py
+++ b/tests/functional/u/undefined/undefined_variable_py38.py
@@ -3,6 +3,7 @@
# Tests for annotation of variables and potentially undefinition
+
def typing_and_assignment_expression():
"""The variable gets assigned in an assignment expression"""
var: int
@@ -15,3 +16,35 @@ def typing_and_self_referncing_assignment_expression():
var: int
if (var := var ** 2): # [undefined-variable]
print(var)
+
+
+def typed_assignment_in_function_default(param: str = (typed_default := "walrus")) -> None:
+ """An annotated assignment expression in a default parameter should not emit"""
+ return param
+
+
+print(typed_default)
+
+
+def assignment_in_function_default(param = (default := "walrus")) -> None:
+ """An assignment expression in a default parameter should not emit"""
+ return param
+
+
+print(default)
+
+
+def no_assignment_in_function_default(param: str = "walrus") -> None:
+ """No annotated assignment expression should emit"""
+ return param
+
+
+print(no_default) # [undefined-variable]
+
+
+def no_parameters_in_function_default() -> None:
+ """Regression tests for functions without any parameters"""
+ return
+
+
+print(again_no_default) # [undefined-variable]
diff --git a/tests/functional/u/undefined/undefined_variable_py38.txt b/tests/functional/u/undefined/undefined_variable_py38.txt
index 96731db52..50a4944ac 100644
--- a/tests/functional/u/undefined/undefined_variable_py38.txt
+++ b/tests/functional/u/undefined/undefined_variable_py38.txt
@@ -1 +1,3 @@
-undefined-variable:16:15:typing_and_self_referncing_assignment_expression:Undefined variable 'var':HIGH
+undefined-variable:17:15:typing_and_self_referncing_assignment_expression:Undefined variable 'var':HIGH
+undefined-variable:42:6::Undefined variable 'no_default':HIGH
+undefined-variable:50:6::Undefined variable 'again_no_default':HIGH
diff --git a/tests/functional/u/unused/unused_variable_py38.py b/tests/functional/u/unused/unused_variable_py38.py
new file mode 100644
index 000000000..7151bb9a8
--- /dev/null
+++ b/tests/functional/u/unused/unused_variable_py38.py
@@ -0,0 +1,32 @@
+"""Tests for the unused-variable message in assignment expressions"""
+
+
+def typed_assignment_in_function_default( # [unused-variable]
+ param: str = (typed_default := "walrus"), # [unused-variable]
+) -> None:
+ """An unused annotated assignment expression in a default parameter should emit"""
+ return param
+
+
+def assignment_in_function_default( # [unused-variable]
+ param=(default := "walrus"), # [unused-variable]
+) -> None:
+ """An unused assignment expression in a default parameter should emit"""
+ return param
+
+
+def assignment_used_in_function_scope( # [unused-variable]
+ param=(function_default := "walrus"),
+) -> None:
+ """An used assignment expression in a default parameter should not emit"""
+ print(function_default)
+ return param
+
+
+def assignment_used_in_global_scope( # [unused-variable]
+ param=(global_default := "walrus"),
+) -> None:
+ """An used assignment expression in a default parameter should not emit"""
+ return param
+
+print(global_default)
diff --git a/tests/functional/u/unused/unused_variable_py38.rc b/tests/functional/u/unused/unused_variable_py38.rc
new file mode 100644
index 000000000..25a81a70f
--- /dev/null
+++ b/tests/functional/u/unused/unused_variable_py38.rc
@@ -0,0 +1,5 @@
+[testoptions]
+min_pyver=3.8
+
+[variables]
+allow-global-unused-variables=no
diff --git a/tests/functional/u/unused/unused_variable_py38.txt b/tests/functional/u/unused/unused_variable_py38.txt
new file mode 100644
index 000000000..40d4e80a5
--- /dev/null
+++ b/tests/functional/u/unused/unused_variable_py38.txt
@@ -0,0 +1,6 @@
+unused-variable:4:0:typed_assignment_in_function_default:Unused variable 'typed_assignment_in_function_default':HIGH
+unused-variable:5:18::Unused variable 'typed_default':HIGH
+unused-variable:11:0:assignment_in_function_default:Unused variable 'assignment_in_function_default':HIGH
+unused-variable:12:11::Unused variable 'default':HIGH
+unused-variable:18:0:assignment_used_in_function_scope:Unused variable 'assignment_used_in_function_scope':HIGH
+unused-variable:26:0:assignment_used_in_global_scope:Unused variable 'assignment_used_in_global_scope':HIGH