mirror of
https://github.com/astral-sh/ruff.git
synced 2025-10-02 06:41:23 +00:00
[ty] Improve the Display
for generic type[]
types (#19667)
This commit is contained in:
parent
a3f28baab4
commit
2ab1502e51
2 changed files with 28 additions and 3 deletions
|
@ -151,6 +151,28 @@ class Foo(type[int]): ...
|
|||
reveal_type(Foo.__mro__) # revealed: tuple[<class 'Foo'>, @Todo(GenericAlias instance), <class 'object'>]
|
||||
```
|
||||
|
||||
## Display of generic `type[]` types
|
||||
|
||||
```toml
|
||||
[environment]
|
||||
python-version = "3.12"
|
||||
```
|
||||
|
||||
```py
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
class Foo[T]: ...
|
||||
|
||||
S = TypeVar("S")
|
||||
|
||||
class Bar(Generic[S]): ...
|
||||
|
||||
def _(x: Foo[int], y: Bar[str], z: list[bytes]):
|
||||
reveal_type(type(x)) # revealed: type[Foo[int]]
|
||||
reveal_type(type(y)) # revealed: type[Bar[str]]
|
||||
reveal_type(type(z)) # revealed: type[list[bytes]]
|
||||
```
|
||||
|
||||
## `@final` classes
|
||||
|
||||
`type[]` types are eagerly converted to class-literal types if a class decorated with `@final` is
|
||||
|
|
|
@ -109,9 +109,12 @@ impl Display for DisplayRepresentation<'_> {
|
|||
}
|
||||
Type::GenericAlias(generic) => write!(f, "<class '{}'>", generic.display(self.db)),
|
||||
Type::SubclassOf(subclass_of_ty) => match subclass_of_ty.subclass_of() {
|
||||
// Only show the bare class name here; ClassBase::display would render this as
|
||||
// type[<class 'Foo'>] instead of type[Foo].
|
||||
SubclassOfInner::Class(class) => write!(f, "type[{}]", class.name(self.db)),
|
||||
SubclassOfInner::Class(ClassType::NonGeneric(class)) => {
|
||||
write!(f, "type[{}]", class.name(self.db))
|
||||
}
|
||||
SubclassOfInner::Class(ClassType::Generic(alias)) => {
|
||||
write!(f, "type[{}]", alias.display(self.db))
|
||||
}
|
||||
SubclassOfInner::Dynamic(dynamic) => write!(f, "type[{dynamic}]"),
|
||||
},
|
||||
Type::SpecialForm(special_form) => special_form.fmt(f),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue