Mypy fails to type check function signature after plugin pass
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
Bug Report
I wrote a plugin to replace types, but Mypy fails to typecheck after my changes. I start off trying to fix the type error in this signature with a plugin:
def almost_id(a: str) -> str:
return int(a)
almost_id("6")
with my plugin:
def replace_str(self, ctx: FunctionSigContext) -> FunctionLike:
api = ctx.api
new_signature = ctx.default_signature.copy_modified(
ret_type=api.named_type('builtins.int')
)
un_anal = new_signature.definition.unanalyzed_type.copy_modified(
ret_type = api.named_type('builtins.int')
)
new_signature.definition.unanalyzed_type = un_anal
typ = new_signature.definition.type.copy_modified(
ret_type = api.named_type('builtins.int')
)
new_signature.definition.type = typ
return new_signature
I have tried going through the attrs of the functionsigcontext, api and the expr_checker but can't seem to find some other functionality to either:
- force mypy to proceed with type checking
- modify the existing type analysis or map
- delay type checking until the plugin mods have been completed, something like defer() in the semantic analyzer.
To Reproduce
gist: https://gist.github.com/dibrinsofor/bddcbd2eedbb233b131bb1b8d562369a
mypy tests/str_int.py
Expected Behavior
I expect mypy to pass
Actual Behavior
tests/str_int.py:2: error: Incompatible return value type (got "int", expected "str") [return-value]
even though printing the new signature returns:
def (a: builtins.str) -> builtins.int
Your Environment
- Mypy version used:
1.14.0+dev.8c7db13f71098a6facea66ab165b6bc3ef688bdf - Mypy command-line flags:
--show-traceback - Python version used:
Python 3.11.5
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
Esegui mypy tests/str_int.py usando la riproduzione del gist e confronta l'errore segnalato con la firma stampata dopo replace_str. Traccia il modo in cui il risultato di FunctionSigContext viene utilizzato durante l'analisi semantica e il controllo delle espressioni, usando i percorsi expr_checker e defer() menzionati nel report. Il lavoro è completato quando il tipo restituito modificato dal plugin viene rispettato e la riproduzione ha esito positivo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- compilers, devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100