stubgen cannot infer precise literal string types from docstring
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit dem gemeldeten infer_sig_from_docstring-Einstiegspunkt und reproduziere die sechs Beispiele aus dem Issue. Verfolge, wie Literal-Annotationen geparst werden, und füge anschließend Abdeckung für String- und Bytes-Werte hinzu, damit die zurückgegebenen Signaturen die erwarteten Literal-Typen beibehalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 55/100