Narrowing types to `Literal` using `in` syntax
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Take this example code:
x = "a"
reveal_type(x)
assert x in ("a", "b", "c")
reveal_type(x)
y = 20
reveal_type(y)
assert y == 10 or y == 20 or y == 50
reveal_type(y)
The current output of this is:
$ mypy x.py
x.py:2: note: Revealed type is "builtins.str"
x.py:4: note: Revealed type is "builtins.str"
x.py:7: note: Revealed type is "builtins.int"
x.py:9: note: Revealed type is "builtins.int"
If mypy were to support type narrowing using chained or statements and in statements, the output would look like:
$ mypy x.py
x.py:4: note: Revealed type is "builtins.str"
x.py:6: note: Revealed type is "Union[Literal['a'], Literal['b'], Literal['c']]"
x.py:9: note: Revealed type is "builtins.int"
x.py:11: note: Revealed type is "Union[Literal[10], Literal[20], Literal[50]]"
I think doing simple narrowing here would be relatively easy and very useful.
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 den x.py-Beispielen im Issue und führe mypy aus, um die aktuell aufgelösten Typen zu bestätigen. Untersuche das bestehende Verhalten von mypy bei der Typeneingrenzung für verkettete Bedingungen mit or und in-Ausdrücke; abgeschlossen ist die Aufgabe, wenn die Beispiele die angeforderten Literal-Vereinigungen sowohl für Zeichenketten- als auch für Ganzzahlfälle auflösen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100