mirror of https://github.com/astral-sh/ruff
add failing test
This commit is contained in:
parent
b9691b8a07
commit
745f4d95ba
|
|
@ -341,3 +341,25 @@ reveal_type(x21) # revealed: X[Literal[1]]
|
||||||
x22: X[Literal[1]] | None = x(1)
|
x22: X[Literal[1]] | None = x(1)
|
||||||
reveal_type(x22) # revealed: X[Literal[1]]
|
reveal_type(x22) # revealed: X[Literal[1]]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Arguments that don't affect a typevar aren't considered
|
||||||
|
|
||||||
|
```py
|
||||||
|
from typing import Any, Iterable, TypeVar
|
||||||
|
|
||||||
|
K = TypeVar("K")
|
||||||
|
V = TypeVar("V")
|
||||||
|
|
||||||
|
# K is invariant in parameter 1 and covariant in parameter 2.
|
||||||
|
def find_dict(lst: Iterable[dict[K, V]], k: K, v: V) -> dict[K, V]:
|
||||||
|
for dct in lst:
|
||||||
|
if dct[k] == v:
|
||||||
|
return dct
|
||||||
|
raise AssertionError(f"Cannot find element in list where key {k} == {v}")
|
||||||
|
|
||||||
|
def _(d: Any, t: str):
|
||||||
|
# Because `d` does not affect the specialization of `K`, we consider `K` covariant instead of
|
||||||
|
# invariant for the purposes of this call. That means we _do_ perform literal promotion on `K`.
|
||||||
|
# revealed: dict[str, str]
|
||||||
|
reveal_type(find_dict(d, "email", t))
|
||||||
|
```
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue