`--strict-equality` flag not working with membership operator and `Literal` types
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
When using any container (set, frozenset, list, tuples...) containing Literal based types, the --strict-equality is not detecting any issues when I use the membership operator in a non-overlapping check.
To Reproduce
from typing import Literal
OPTIONS = Literal["a", "b"]
var: list[OPTIONS] = ["a"]
if "c" in var: # MYPY OK
pass
Expected Behavior
When the flag --strict-equality is set, I would expect that mypy raises an erorr here. Same as it does when I do a non-overlapping equality check:
from typing import Literal
OPTIONS = Literal["a", "b"]
var: list[OPTIONS] = ["a"]
if var[0] == "c": # error: Non-overlapping equality check (left operand type: "Literal['a', 'b']", right operand type: "Literal['c']") [comparison-overlap]
pass
Actual Behavior
No errors are raised
Your Environment
Using Mypy version 1.9.0
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
Führe zunächst die gemeldete Python-Reproduktion mit --strict-equality aus und vergleiche ihre Membership-Prüfung mit der indizierten Gleichheitsprüfung. Finde die Einstiegspunkte für Strict-Equality und Membership-Analyse und füge anschließend einen Regressionstest hinzu, der einen Container mit Literal-Werten abdeckt. Als erledigt gilt die Änderung, wenn mypy für den Membership-Ausdruck eine Prüfung auf nicht überlappende Typen meldet, ohne gültige Membership-Prüfungen zu beeinträchtigen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100