Description
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.
- Clone https://gitlab.com/mrossinek/cobib
- Run
mypy --strict src/cobib/config/event.py
withmypy -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.