mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-04 10:48:32 +00:00
[ty] Add generic inference for dataclasses (#18443)
## Summary An issue seen here https://github.com/astral-sh/ty/issues/500 The `__init__` method of dataclasses had no inherited generic context, so we could not infer the type of an instance from a constructor call with generics ## Test Plan Add tests to classes.md` in generics folder
This commit is contained in:
parent
71d8a5da2a
commit
e8ea40012a
4 changed files with 30 additions and 4 deletions
|
@ -379,6 +379,21 @@ C[None](b"bytes") # error: [no-matching-overload]
|
|||
C[None](12)
|
||||
```
|
||||
|
||||
### Synthesized methods with dataclasses
|
||||
|
||||
```py
|
||||
from dataclasses import dataclass
|
||||
from typing import Generic, TypeVar
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
@dataclass
|
||||
class A(Generic[T]):
|
||||
x: T
|
||||
|
||||
reveal_type(A(x=1)) # revealed: A[int]
|
||||
```
|
||||
|
||||
## Generic subclass
|
||||
|
||||
When a generic subclass fills its superclass's type parameter with one of its own, the actual types
|
||||
|
|
|
@ -354,6 +354,18 @@ C[None](b"bytes") # error: [no-matching-overload]
|
|||
C[None](12)
|
||||
```
|
||||
|
||||
### Synthesized methods with dataclasses
|
||||
|
||||
```py
|
||||
from dataclasses import dataclass
|
||||
|
||||
@dataclass
|
||||
class A[T]:
|
||||
x: T
|
||||
|
||||
reveal_type(A(x=1)) # revealed: A[int]
|
||||
```
|
||||
|
||||
## Generic subclass
|
||||
|
||||
When a generic subclass fills its superclass's type parameter with one of its own, the actual types
|
||||
|
|
|
@ -134,9 +134,7 @@ class Property[T](NamedTuple):
|
|||
name: str
|
||||
value: T
|
||||
|
||||
# TODO: this should be supported (no error, revealed type of `Property[float]`)
|
||||
# error: [invalid-argument-type]
|
||||
reveal_type(Property("height", 3.4)) # revealed: Property[Unknown]
|
||||
reveal_type(Property("height", 3.4)) # revealed: Property[float]
|
||||
```
|
||||
|
||||
## Attributes on `NamedTuple`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue