diff options
author | Ikraduya Edian <ikraduya@gmail.com> | 2021-02-28 03:27:15 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-27 21:27:15 +0100 |
commit | 41d2349c7b84714539a9979b5344294029c984ab (patch) | |
tree | b76417d7374180805b74470849e087e43dec745d | |
parent | 8cbcf87e80cf7886a05c760a92e11ee27e913d75 (diff) | |
download | pylint-git-41d2349c7b84714539a9979b5344294029c984ab.tar.gz |
Fix False positive on Enum.__members__.items() (#4135)
* Fix false positive on Enum.__members__.{values, keys}
* Fix False positive on Enum.__members__.items()
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
Co-authored-by: Pierre Sassoulas <pierre.sassoulas@gmail.com>
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | pylint/checkers/typecheck.py | 12 | ||||
-rw-r--r-- | tests/functional/m/member_checks.py | 14 |
3 files changed, 29 insertions, 0 deletions
@@ -12,6 +12,9 @@ What's New in Pylint 2.7.2? .. Put bug fixes that will be cherry-picked to latest major version here +* Fix False Positive on `Enum.__members__.items()`, `Enum.__members__.values`, and `Enum.__members__.keys` + Closes #4123 + What's New in Pylint 2.7.1? =========================== diff --git a/pylint/checkers/typecheck.py b/pylint/checkers/typecheck.py index ad4ca7047..65f79c18b 100644 --- a/pylint/checkers/typecheck.py +++ b/pylint/checkers/typecheck.py @@ -505,6 +505,18 @@ def _emit_no_member(node, owner, owner_name, ignored_mixins=True, ignored_none=T return False except astroid.NotFoundError: return True + if ( + owner.parent + and isinstance(owner.parent, astroid.ClassDef) + and owner.parent.name == "EnumMeta" + and owner_name == "__members__" + and node.attrname in ["items", "values", "keys"] + ): + print(node.attrname) + # Avoid false positive on Enum.__members__.{items(), values, keys} + # See https://github.com/PyCQA/pylint/issues/4123 + return False + return True diff --git a/tests/functional/m/member_checks.py b/tests/functional/m/member_checks.py index 30f16c58c..291daee12 100644 --- a/tests/functional/m/member_checks.py +++ b/tests/functional/m/member_checks.py @@ -217,3 +217,17 @@ class SomeClassUsingSlice: else: self.attribute = [] self.attribute.append(1) + +from enum import Enum +class Animal(Enum): + ANT = 1 + BEE = 2 + CAT = 3 + DOG = 4 +# To test false positive no-member on Enum.__members__.items() +for itm in Animal.__members__.items(): + print(itm) +for keyy in Animal.__members__.keys: + print(keyy) +for vall in Animal.__members__.values: + print(vall) |