summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIkraduya Edian <ikraduya@gmail.com>2021-02-28 03:27:15 +0700
committerGitHub <noreply@github.com>2021-02-27 21:27:15 +0100
commit41d2349c7b84714539a9979b5344294029c984ab (patch)
treeb76417d7374180805b74470849e087e43dec745d
parent8cbcf87e80cf7886a05c760a92e11ee27e913d75 (diff)
downloadpylint-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--ChangeLog3
-rw-r--r--pylint/checkers/typecheck.py12
-rw-r--r--tests/functional/m/member_checks.py14
3 files changed, 29 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index df57bcf57..d3976d1e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)