mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-01 06:11:43 +00:00
130 lines
3 KiB
Python
130 lines
3 KiB
Python
import typing
|
|
from typing import Any, TypeAlias
|
|
|
|
# UP040
|
|
x: typing.TypeAlias = int
|
|
x: TypeAlias = int
|
|
|
|
# UP040 simple generic
|
|
T = typing.TypeVar["T"]
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# UP040 call style generic
|
|
T = typing.TypeVar("T")
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# UP040 bounded generic
|
|
T = typing.TypeVar("T", bound=int)
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# UP040 constrained generic
|
|
T = typing.TypeVar("T", int, str)
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# UP040 contravariant generic
|
|
T = typing.TypeVar("T", contravariant=True)
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# UP040 covariant generic
|
|
T = typing.TypeVar("T", covariant=True)
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# UP040 in class scope
|
|
T = typing.TypeVar["T"]
|
|
class Foo:
|
|
# reference to global variable
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# reference to class variable
|
|
TCLS = typing.TypeVar["TCLS"]
|
|
y: typing.TypeAlias = list[TCLS]
|
|
|
|
# UP040 won't add generics in fix
|
|
T = typing.TypeVar(*args)
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# `default` should be skipped for now, added in Python 3.13
|
|
T = typing.TypeVar("T", default=Any)
|
|
x: typing.TypeAlias = list[T]
|
|
|
|
# OK
|
|
x: TypeAlias
|
|
x: int = 1
|
|
|
|
# Ensure that "T" appears only once in the type parameters for the modernized
|
|
# type alias.
|
|
T = typing.TypeVar["T"]
|
|
Decorator: TypeAlias = typing.Callable[[T], T]
|
|
|
|
|
|
from typing import TypeVar, Annotated, TypeAliasType
|
|
|
|
from annotated_types import Gt, SupportGt
|
|
|
|
|
|
# https://github.com/astral-sh/ruff/issues/11422
|
|
T = TypeVar("T")
|
|
PositiveList = TypeAliasType(
|
|
"PositiveList", list[Annotated[T, Gt(0)]], type_params=(T,)
|
|
)
|
|
|
|
# Bound
|
|
T = TypeVar("T", bound=SupportGt)
|
|
PositiveList = TypeAliasType(
|
|
"PositiveList", list[Annotated[T, Gt(0)]], type_params=(T,)
|
|
)
|
|
|
|
# Multiple bounds
|
|
T1 = TypeVar("T1", bound=SupportGt)
|
|
T2 = TypeVar("T2")
|
|
T3 = TypeVar("T3")
|
|
Tuple3 = TypeAliasType("Tuple3", tuple[T1, T2, T3], type_params=(T1, T2, T3))
|
|
|
|
# No type_params
|
|
PositiveInt = TypeAliasType("PositiveInt", Annotated[int, Gt(0)])
|
|
PositiveInt = TypeAliasType("PositiveInt", Annotated[int, Gt(0)], type_params=())
|
|
|
|
# OK: Other name
|
|
T = TypeVar("T", bound=SupportGt)
|
|
PositiveList = TypeAliasType(
|
|
"PositiveList2", list[Annotated[T, Gt(0)]], type_params=(T,)
|
|
)
|
|
|
|
# `default` should be skipped for now, added in Python 3.13
|
|
T = typing.TypeVar("T", default=Any)
|
|
AnyList = TypeAliasType("AnyList", list[T], typep_params=(T,))
|
|
|
|
# unsafe fix if comments within the fix
|
|
T = TypeVar("T")
|
|
PositiveList = TypeAliasType( # eaten comment
|
|
"PositiveList", list[Annotated[T, Gt(0)]], type_params=(T,)
|
|
)
|
|
|
|
T = TypeVar("T")
|
|
PositiveList = TypeAliasType(
|
|
"PositiveList", list[Annotated[T, Gt(0)]], type_params=(T,)
|
|
) # this comment should be okay
|
|
|
|
|
|
# this comment will actually be preserved because it's inside the "value" part
|
|
T = TypeVar("T")
|
|
PositiveList = TypeAliasType(
|
|
"PositiveList", list[
|
|
Annotated[T, Gt(0)], # preserved comment
|
|
], type_params=(T,)
|
|
)
|
|
|
|
T: TypeAlias = (
|
|
int
|
|
| str
|
|
)
|
|
|
|
T: TypeAlias = ( # comment0
|
|
# comment1
|
|
int # comment2
|
|
# comment3
|
|
| # comment4
|
|
# comment5
|
|
str # comment6
|
|
# comment7
|
|
) # comment8
|