Skip to content

False positives for "Attempted to reuse member name in Enum" #11971

Closed
@mrossinek

Description

@mrossinek

Bug Report

False positives for Enum member reuse attempts when an Enum has a large number of entries.
I first encountered this issue here

To Reproduce

Unfortunately, I have not yet found a minimal reproducing example.

  1. Clone https://gitlab.com/mrossinek/cobib
  2. Run mypy --strict src/cobib/config/event.py with mypy -V >= 0.930

Expected Behavior

No errors should occur.

Actual Behavior

I obtain the following errors:

src/cobib/config/event.py:137: error: Attempted to reuse member name "PostAddCommand" in Enum definition "Event"  [misc]
src/cobib/config/event.py:222: error: Attempted to reuse member name "PostImportCommand" in Enum definition "Event"  [misc]
src/cobib/config/event.py:445: error: Attempted to reuse member name "PostBibtexParse" in Enum definition "Event"  [misc]
src/cobib/config/event.py:498: error: Attempted to reuse member name "PostYAMLParse" in Enum definition "Event"  [misc]
src/cobib/config/event.py:551: error: Attempted to reuse member name "PostArxivParse" in Enum definition "Event"  [misc]
src/cobib/config/event.py:578: error: Attempted to reuse member name "PostDOIParse" in Enum definition "Event"  [misc]
src/cobib/config/event.py:605: error: Attempted to reuse member name "PostISBNParse" in Enum definition "Event"  [misc]
src/cobib/config/event.py:632: error: Attempted to reuse member name "PostURLParse" in Enum definition "Event"  [misc]
src/cobib/config/event.py:663: error: Attempted to reuse member name "PostZoteroImport" in Enum definition "Event"  [misc]

Your Environment

  • Mypy version used: 0.930 and 0.931
  • Mypy command-line flags: --strict
  • Mypy configuration options from mypy.ini (and other config files):
[mypy]
python_version = 3.7
show_error_codes = True
warn_return_any = True
warn_unused_configs = True
  • Python version used: 3.10.1
  • Operating system and version: Arch Linux, 5.15.13-arch1-1 as well as in the python:latest Docker container

More information

I believe that this bug was introduced as part of #11267. It introduced the following line: https://github.com/python/mypy/blob/48d810d/mypy/semanal.py#L2874
Instead, I would expect this line to look more like https://github.com/python/mypy/blob/48d810d/mypy/semanal.py#L453 (i.e. also allow PlaceholderNode objects.

The reason that I believe this to be necessary is open inspecting the runtime data during the offending scenarios. There I was able to extract the following names: SymbolTable object:

SymbolTable(
  PostAddCommand : Mdef/PlaceholderNode (cobib.config.event.Event.PostAddCommand)
  PostArxivParse : Mdef/PlaceholderNode (cobib.config.event.Event.PostArxivParse)
  PostBibtexDump : Mdef/Var (cobib.config.event.Event.PostBibtexDump) : cobib.config.event.Event
  PostBibtexParse : Mdef/PlaceholderNode (cobib.config.event.Event.PostBibtexParse)
  PostDOIParse : Mdef/PlaceholderNode (cobib.config.event.Event.PostDOIParse)
  PostDeleteCommand : Mdef/Var (cobib.config.event.Event.PostDeleteCommand) : cobib.config.event.Event
  PostEditCommand : Mdef/Var (cobib.config.event.Event.PostEditCommand) : cobib.config.event.Event
  PostExportCommand : Mdef/Var (cobib.config.event.Event.PostExportCommand) : cobib.config.event.Event
  PostFileDownload : Mdef/Var (cobib.config.event.Event.PostFileDownload) : cobib.config.event.Event
  PostGitCommit : Mdef/Var (cobib.config.event.Event.PostGitCommit) : cobib.config.event.Event
  PostISBNParse : Mdef/PlaceholderNode (cobib.config.event.Event.PostISBNParse)
  PostImportCommand : Mdef/PlaceholderNode (cobib.config.event.Event.PostImportCommand)
  PostInitCommand : Mdef/Var (cobib.config.event.Event.PostInitCommand) : cobib.config.event.Event
  PostListCommand : Mdef/Var (cobib.config.event.Event.PostListCommand) : cobib.config.event.Event
  PostModifyCommand : Mdef/Var (cobib.config.event.Event.PostModifyCommand) : cobib.config.event.Event
  PostOpenCommand : Mdef/Var (cobib.config.event.Event.PostOpenCommand) : cobib.config.event.Event
  PostRedoCommand : Mdef/Var (cobib.config.event.Event.PostRedoCommand) : cobib.config.event.Event
  PostSearchCommand : Mdef/Var (cobib.config.event.Event.PostSearchCommand) : cobib.config.event.Event
  PostShowCommand : Mdef/Var (cobib.config.event.Event.PostShowCommand) : cobib.config.event.Event
  PostURLParse : Mdef/PlaceholderNode (cobib.config.event.Event.PostURLParse)
  PostUndoCommand : Mdef/Var (cobib.config.event.Event.PostUndoCommand) : cobib.config.event.Event
  PostYAMLDump : Mdef/Var (cobib.config.event.Event.PostYAMLDump) : cobib.config.event.Event
  PostYAMLParse : Mdef/PlaceholderNode (cobib.config.event.Event.PostYAMLParse)
  PostZoteroImport : Mdef/PlaceholderNode (cobib.config.event.Event.PostZoteroImport)
  PreAddCommand : Mdef/Var (cobib.config.event.Event.PreAddCommand) : cobib.config.event.Event
  PreArxivParse : Mdef/Var (cobib.config.event.Event.PreArxivParse) : cobib.config.event.Event
  PreBibtexDump : Mdef/Var (cobib.config.event.Event.PreBibtexDump) : cobib.config.event.Event
  PreBibtexParse : Mdef/Var (cobib.config.event.Event.PreBibtexParse) : cobib.config.event.Event
  PreDOIParse : Mdef/Var (cobib.config.event.Event.PreDOIParse) : cobib.config.event.Event
  PreDeleteCommand : Mdef/Var (cobib.config.event.Event.PreDeleteCommand) : cobib.config.event.Event
  PreEditCommand : Mdef/Var (cobib.config.event.Event.PreEditCommand) : cobib.config.event.Event
  PreExportCommand : Mdef/Var (cobib.config.event.Event.PreExportCommand) : cobib.config.event.Event
  PreFileDownload : Mdef/Var (cobib.config.event.Event.PreFileDownload) : cobib.config.event.Event
  PreGitCommit : Mdef/Var (cobib.config.event.Event.PreGitCommit) : cobib.config.event.Event
  PreISBNParse : Mdef/Var (cobib.config.event.Event.PreISBNParse) : cobib.config.event.Event
  PreImportCommand : Mdef/Var (cobib.config.event.Event.PreImportCommand) : cobib.config.event.Event
  PreInitCommand : Mdef/Var (cobib.config.event.Event.PreInitCommand) : cobib.config.event.Event
  PreListCommand : Mdef/Var (cobib.config.event.Event.PreListCommand) : cobib.config.event.Event
  PreModifyCommand : Mdef/Var (cobib.config.event.Event.PreModifyCommand) : cobib.config.event.Event
  PreOpenCommand : Mdef/Var (cobib.config.event.Event.PreOpenCommand) : cobib.config.event.Event
  PreRedoCommand : Mdef/Var (cobib.config.event.Event.PreRedoCommand) : cobib.config.event.Event
  PreSearchCommand : Mdef/Var (cobib.config.event.Event.PreSearchCommand) : cobib.config.event.Event
  PreShowCommand : Mdef/Var (cobib.config.event.Event.PreShowCommand) : cobib.config.event.Event
  PreURLParse : Mdef/Var (cobib.config.event.Event.PreURLParse) : cobib.config.event.Event
  PreUndoCommand : Mdef/Var (cobib.config.event.Event.PreUndoCommand) : cobib.config.event.Event
  PreYAMLDump : Mdef/Var (cobib.config.event.Event.PreYAMLDump) : cobib.config.event.Event
  PreYAMLParse : Mdef/Var (cobib.config.event.Event.PreYAMLParse) : cobib.config.event.Event
  PreZoteroImport : Mdef/Var (cobib.config.event.Event.PreZoteroImport) : cobib.config.event.Event
  __new__ : Mdef/FuncDef (cobib.config.event.Event.__new__) : def (cls: Any, annotation: Any?) -> Event?
  _annotation_ : Mdef/Var (cobib.config.event.Event._annotation_) : Any
  fire : Mdef/FuncDef (cobib.config.event.Event.fire) : def (self: Any, *args: Any?, **kwargs: Any?) -> Any?
  subscribe : Mdef/FuncDef (cobib.config.event.Event.subscribe) : def (self: Any, function: Callable?) -> Callable?
  validate : Mdef/FuncDef (cobib.config.event.Event.validate) : def (self: Any) -> bool?
)

This is just prior to this error being raised:

Attempted to reuse member name "PostAddCommand" in Enum definition "Event"

The following are the lvalue and names[name] at this specific occurrence.

NameExpr(PostAddCommand) Mdef/PlaceholderNode (cobib.config.event.Event.PostAddCommand)

I am going to open a PR in a second with a suggestion to fix this by also allowing PlaceholderNode objects.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions