Skip to content

Commit

Permalink
Check that a name exists inside an enum.Enum class' __members__ c…
Browse files Browse the repository at this point in the history
…ontainer before doing the ``invalid-name`` check.

Refs pylint-dev#7402
  • Loading branch information
mbyrnepr2 committed Jul 31, 2023
1 parent 1f8c4d9 commit 262181c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 1 deletion.
3 changes: 3 additions & 0 deletions doc/whatsnew/fragments/7402.false_positive
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix a false positive for ``invalid-name`` when a type-annotated class variable in an ``enum.Enum`` class has no assigned value.

Refs #7402
9 changes: 8 additions & 1 deletion pylint/checkers/base/name_checker/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,14 @@ def visit_assignname( # pylint: disable=too-many-branches
elif isinstance(frame, nodes.ClassDef):
if not list(frame.local_attr_ancestors(node.name)):
for ancestor in frame.ancestors():
if utils.is_enum(ancestor) or utils.is_assign_name_annotated_with(
is_enum_member = False
if utils.is_enum(ancestor):
enum_members = next(frame.igetattr("__members__"))
is_enum_member = any(
node.name == name_node.name
for _, name_node in enum_members.items
)
if (is_enum_member) or utils.is_assign_name_annotated_with(
node, "Final"
):
self._check_name("class_const", node.name, node)
Expand Down

0 comments on commit 262181c

Please sign in to comment.