python / python/mypy

More ideas about plugin system

Aperta
#5,905 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

needs discussion priority-1-normal topic-plugins
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 moving type_object_type() (and maybe a bunch of other helpers) from checkmember.py to a separate module (which is probably a good idea on its own). We can also move some helpers from checker.py related 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 like name = 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() or erase_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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. 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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.