Extending `TraverserVisitor` causes `TypeError: interpreted classes cannot inherit from compiled traits`
Ouverte
Personne n'a encore pris cette issue.
bug
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Description
Bug Report
Plugin code cannot extend any of the Visitor classes
To Reproduce
from mypy.nodes import IndexExpr, MypyFile
from mypy.plugin import Plugin
from mypy.traverser import TraverserVisitor
def plugin(_: str) -> type[Plugin]:
return ReproducerPlugin
class ReproducerPlugin(Plugin):
def get_additional_deps(self, file: MypyFile) -> list[tuple[int, str, int]]:
class IndexVisitor(TraverserVisitor):
def visit_index_expr(self, ie: IndexExpr, /) -> None:
print(ie)
file.accept(IndexVisitor())
Expected Behavior
It not crash
Actual Behavior
[ERROR ] An un-handled exception was caught by Salt's global exception handler:
TypeError: interpreted classes cannot inherit from compiled traits
Traceback (most recent call last):
File "venv/bin/mypy", line 8, in <module>
sys.exit(console_entry())
~~~~~~~~~~~~~^^
File "venv/lib/python3.13/site-packages/mypy/__main__.py", line 15, in console_entry
main()
~~~~^^
File "mypy/main.py", line 127, in main
File "mypy/main.py", line 211, in run_build
File "mypy/build.py", line 191, in build
File "mypy/build.py", line 267, in _build
File "mypy/build.py", line 2886, in dispatch
File "mypy/build.py", line 3072, in load_graph
File "mypy/build.py", line 1994, in __init__
File "mypy/build.py", line 2292, in compute_dependencies
File "mypy/plugin.py", line 845, in get_additional_deps
File "plugin/__init__.py", line 16, in get_additional_deps
file.accept(IndexVisitor())
~~~~~~~~~~~~^^
TypeError: interpreted classes cannot inherit from compiled traits
Your Environment
LOG: Mypy Version: 1.17.0
LOG: Config File: pyproject.toml
LOG: Configured Executable: venv/bin/python3.13
LOG: Current Executable: venv/bin/python3.13
LOG: Cache Dir: .mypy_cache
LOG: Compiled: True
LOG: Exclude: []
LOG: Found source: BuildSource(path='test.py', module='test', has_text=False, base_dir='.', followed=False)
LOG: Metadata abandoned for test: options differ
LOG: Metadata not found for test
LOG: Parsing test.py (test)
LOG: Build finished in 0.013 seconds with 1 modules, and 0 errors
from pyproject.toml:
[tool.mypy]
plugins = ["pydantic.mypy", "plugin"]
strict = true
namespace_packages = true
mypy_path = ".mypy-stubs/"
scripts_are_modules = true
- Python version used: 3.13
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par exécuter le reproducteur Python 3.13 fourni avec mypy compilé, puis inspectez TraverserVisitor dans mypy/traverser.py ainsi que le chemin de chargement des plugins indiqué dans mypy/plugin.py. Suivez la raison pour laquelle une sous-classe interprétée ne parvient pas à s'initialiser et vérifiez que le reproducteur se termine sans TypeError.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 42/100