Destructured tuple discrimination
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
Feature
Destructured tuple discrimination
Pitch
Mypy shoud be able to discriminate between a union of structured types like tuples after destructuring.
import typing as t
from typing_extensions import reveal_type
ResultTup = t.Union[t.Tuple[int, None], t.Tuple[None, ValueError]]
def f(x: int) -> ResultTup:
if x < 0:
return None, ValueError("x must be positive")
else:
return x + 1, None
# NO DESTRUCTURING WORKS AS EXPECTED
result = f(1)
if result[1] is not None:
...
else:
# mypy: Revealed type is "builtins.int"
print(reveal_type(result[0]))
# DESTRUCTURING LOSES ASSOCIATION
ok, error = f(1)
if error is not None:
...
else:
# mypy: Revealed type is "Union[builtins.int, None]"
print(reveal_type(ok))
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 riproducendo l'esempio Python dell'issue e confronta i tipi rivelati per l'accesso indicizzato con quelli dopo il destructuring. Traccia il percorso del controllo dei tipi per il narrowing delle union e il destructuring delle tuple; il lavoro è concluso quando l'associazione tra i valori destrutturati viene preservata, così che il controllo di error restringa ok a int.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- tooling
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100