More ideas about plugin system
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
After some time spent on writing SQLAlchemy plugin and a discussion with @JukkaL here are some comments and ideas about our plugin :
-
Currently, member signature hook is not called on
__init__and__new__. Current workaround is to use function hook, but it is still painful. The solution would require movingtype_object_type()(and maybe a bunch of other helpers) fromcheckmember.pyto a separate module (which is probably a good idea on its own). We can also move some helpers fromchecker.pyrelated to type objects to the same module. -
During semantic analysis types of expressions are not known. This poses a problem in attrs and even more in SQLAlchemy: When generating an
__init__method for a model, plugin needs to figure out what is a type of attributes from definitions likename = Column(String(40)). Currently I do this using some heuristics that works in 95% of cases (and so does attrs plugin), but a better solution is probably to just store names of "magic" classes (SQLAlchemy models, dataclasses etc.) in the plugin state, add a dummy__init__to symbol table, and defer figuring out actual type to the method signature hook that is called in type checking (depends on fixing previous bullet). -
It is better to move calling semantic analysis hooks to the very end, or (probably even better) just allow them to defer current target (but this is currently not possible).
-
We should not allow most type operations in semantic analysis hooks (we can't enforce it, but should at least document it clearly). Some operations are still OK (like
map_instance_to_supertype()orerase_type()). -
The type checking hooks should also be able to defer current target using a special return value or an exception (e.g.
__init__signature hook in the SQLAlchemy example above if one would use a user-defined type in an import cycle).
Probably, most (or all) of decisions should be made after the upcoming semanal.py refactoring.
(Also function hook is inconvenient, but @gvanrossum already mentioned this in https://github.com/python/mypy/issues/5409 that has a bunch of good ideas about improving plugin system.)
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia leggendo la logica relativa ai plugin in checkmember.py e checker.py, quindi esamina il refactoring pianificato di semanal.py e la issue #5409 collegata. La issue elenca diverse domande di progettazione sugli hook per l’analisi semantica e il controllo dei tipi, ma non definisce una singola modifica né un criterio concreto di completamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100