diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | pylint/checkers/variables.py | 8 | ||||
-rw-r--r-- | tests/functional/u/unused/unused_import_class_def_keyword.py | 38 |
3 files changed, 50 insertions, 0 deletions
@@ -67,6 +67,10 @@ Release date: TBA * Improve check if class is subscriptable PEP585 +* Fix false-positive for ``unused-import`` on class keyword arguments + + Closes #3202 + What's New in Pylint 2.7.2? =========================== diff --git a/pylint/checkers/variables.py b/pylint/checkers/variables.py index 875257155..9fc523576 100644 --- a/pylint/checkers/variables.py +++ b/pylint/checkers/variables.py @@ -976,6 +976,14 @@ class VariablesChecker(BaseChecker): ): continue + # Ignore inner class scope for keywords in class definition + if ( + current_consumer.scope_type == "class" + and isinstance(node.parent, astroid.Keyword) + and isinstance(node.parent.parent, astroid.ClassDef) + ): + continue + # if the name node is used as a function default argument's value or as # a decorator, then start from the parent frame of the function instead # of the function frame - and thus open an inner class scope diff --git a/tests/functional/u/unused/unused_import_class_def_keyword.py b/tests/functional/u/unused/unused_import_class_def_keyword.py new file mode 100644 index 000000000..0d6b59987 --- /dev/null +++ b/tests/functional/u/unused/unused_import_class_def_keyword.py @@ -0,0 +1,38 @@ +""" +Test false-positive for unused-import on class keyword arguments + + https://github.com/PyCQA/pylint/issues/3202 +""" +# pylint: disable=missing-docstring,too-few-public-methods,invalid-name,import-error + +# Imports don't exist! Only check `unused-import` +from const import DOMAIN +from const import DOMAIN_2 +from const import DOMAIN_3 + + +class Child: + def __init_subclass__(cls, **kwargs): + pass + +class Parent(Child, domain=DOMAIN): + pass + + +# Alternative 1 +class Parent_2(Child, domain=DOMAIN_2): + DOMAIN_2 = DOMAIN_2 + + +# Alternative 2 +class A: + def __init__(self, arg): + pass + +class B: + CONF = "Hello World" + SCHEMA = A(arg=CONF) + + +# Test normal instantiation +A(arg=DOMAIN_3) |