python / python/mypy

(🐞) `always-true`/`always-false` doesn't activate until it's truth is checked

Aperta
#12,325 2 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Merge medio
1g 18h
PR unite (30g)
54

Descrizione

test.py:

from typing import Literal


def foo(a: Literal[True]) -> None:
    ...


FOO: bool
foo(FOO)  # error: Argument 1 to "foo" has incompatible type "bool"; expected "Literal[True]"  [arg-type]
reveal_type(FOO)  # note: Revealed type is "builtins.bool"
if not FOO:
    pass
reveal_type(FOO)  # note: Revealed type is "Literal[True]"
if not FOO:
    pass
import test2

test2.py:

from test import FOO

reveal_type(FOO)  # note: Revealed type is "builtins.bool"
if FOO:
    pass
reveal_type(FOO)  # note: Revealed type is "Literal[True]"

> mypy --always-true FOO test.py

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il report con test.py e test2.py usando mypy --always-true FOO test.py, confrontando i tipi rivelati prima e dopo ogni controllo di verità. Traccia la gestione di --always-true e di FOO importato; il lavoro è completato quando il comportamento di narrowing riportato è coerente senza richiedere un controllo di verità precedente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.