stubgen cannot infer precise literal string types from docstring
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'm using stubgen to generate pyi files for a python c extension module.
Some functions take arguments of type Literal["xxx", "yyy"]; such constraints are written in the docstring of those functions.
After stubgen, these annotations are missing; however this only happens when the arguments of Literal contain str or bytes type.
This problem can be reproduced using infer_sig_from_docstring (see below).
To Reproduce
from mypy.stubdoc import infer_sig_from_docstring
# literal int and bool works as expected
print(infer_sig_from_docstring("f(x: Literal[42]) -> None", "f"))
print(infer_sig_from_docstring("f(x: Literal[False]) -> None", "f"))
# doesn't work
print(infer_sig_from_docstring("f(x: Literal['4_2']) -> None", "f"))
print(infer_sig_from_docstring('f(x: Literal["4_2"]) -> None', "f"))
print(infer_sig_from_docstring("f(x: Literal[b'4_2']) -> None", "f"))
print(infer_sig_from_docstring('f(x: Literal[b"4_2"]) -> None', "f"))
Expected Behavior
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal[42]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal[False]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal["4_2"]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal["4_2"]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal[b"4_2"]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal[b"4_2"]', default=False)], ret_type='None')]
Actual Behavior
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal[42]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type='Literal[False]', default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type=None, default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type=None, default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type=None, default=False)], ret_type='None')]
[FunctionSig(name='f', args=[ArgSig(name='x', type=None, default=False)], ret_type='None')]
Your Environment
- Mypy version used: 0.982
- Python version used: 3.10.8
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 dal punto di ingresso infer_sig_from_docstring segnalato e riproduci i sei esempi dell’issue. Traccia il modo in cui vengono analizzate le annotazioni Literal, quindi aggiungi la copertura per i valori string e bytes, in modo che le firme restituite preservino i tipi Literal attesi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 55/100