False negative: covariant `TypeVar`s not rejected in function signatures
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
To Reproduce
mypy accepts the following code without issues:
from typing import Generic, TypeVar
T_co = TypeVar("T_co", covariant=True)
class FooGeneric(Generic[T_co]):
pass
def accepts_foo(x: FooGeneric[T_co]) -> None:
pass
Expected Behavior
My understanding is that covariant and contravariant are only allowed on type variables used to parameterise generics.
As such anything other than accepts_foo(x: FooGeneric[T]) (or accepts_foo(x: FooGeneric)) should be rejected. For example accepts_foo(x: FooGeneric[T_contra]) is also accepted, but this makes no sense: accepts_foo cannot define its own version of FooGeneric that acts contravariantly in its type variable.
Your Environment
- Mypy version used: 0.950
- Python version used: 3.10.0
- Operating system and version: Ubuntu 20.04.2 on WSL2 on Windows 10
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
Es ist keine Quelldatei und kein Test benannt. Beginne damit, das bereitgestellte Snippet mit mypy zu reproduzieren, und verfolge anschließend die Validierung der Varianz von TypeVars; abgeschlossen ist die Aufgabe, wenn Signaturen mit kovarianten oder kontravarianten TypeVars abgelehnt werden, während die angegebenen gültigen Formen weiterhin akzeptiert werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 45/100