diff options
author | Marc Mueller <30130371+cdce8p@users.noreply.github.com> | 2022-05-05 21:30:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-05 21:30:12 +0200 |
commit | 5d796836175cc1ac344fef898e5d8b8b5c29ac82 (patch) | |
tree | edb189b888d159cf488ea99db2a79d762f2d0e81 | |
parent | 1be6cf9cc26a37d9de11578146442759b49b5bf7 (diff) | |
download | pylint-git-5d796836175cc1ac344fef898e5d8b8b5c29ac82.tar.gz |
Fix invalid-enum-extension with IntFlag (#6511)
-rw-r--r-- | pylint/checkers/classes/class_checker.py | 20 | ||||
-rw-r--r-- | tests/functional/i/invalid/invalid_enum_extension.py | 7 |
2 files changed, 16 insertions, 11 deletions
diff --git a/pylint/checkers/classes/class_checker.py b/pylint/checkers/classes/class_checker.py index 42db70df2..c130686f4 100644 --- a/pylint/checkers/classes/class_checker.py +++ b/pylint/checkers/classes/class_checker.py @@ -818,17 +818,17 @@ a metaclass class method.", ): self.add_message("inherit-non-class", args=base.as_string(), node=node) - if ( - isinstance(ancestor, nodes.ClassDef) - and ancestor.is_subtype_of("enum.Enum") - and any(isinstance(stmt, nodes.Assign) for stmt in ancestor.body) + if isinstance(ancestor, nodes.ClassDef) and ancestor.is_subtype_of( + "enum.Enum" ): - self.add_message( - "invalid-enum-extension", - args=ancestor.name, - node=node, - confidence=INFERENCE, - ) + members = ancestor.getattr("__members__") + if members and isinstance(members[0], nodes.Dict) and members[0].items: + self.add_message( + "invalid-enum-extension", + args=ancestor.name, + node=node, + confidence=INFERENCE, + ) if ancestor.name == object.__name__: self.add_message( diff --git a/tests/functional/i/invalid/invalid_enum_extension.py b/tests/functional/i/invalid/invalid_enum_extension.py index af29fcdf8..5af11af38 100644 --- a/tests/functional/i/invalid/invalid_enum_extension.py +++ b/tests/functional/i/invalid/invalid_enum_extension.py @@ -1,6 +1,6 @@ """Test check for classes extending an Enum class.""" # pylint: disable=missing-class-docstring,invalid-name -from enum import Enum +from enum import Enum, IntFlag # We don't flag the Enum class itself class A(Enum): @@ -19,3 +19,8 @@ class C(Enum): class D(C): x = 3 + + +class CustomFlags(IntFlag): + SUPPORT_OPEN = 1 + SUPPORT_CLOSE = 2 |