mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 13:51:16 +00:00
[ty] dataclasses.field
support (#19140)
## Summary Add an initial set of tests for `dataclasses.field`.
This commit is contained in:
parent
ab3af924ef
commit
68106dd631
1 changed files with 35 additions and 0 deletions
|
@ -0,0 +1,35 @@
|
||||||
|
# Dataclass fields
|
||||||
|
|
||||||
|
## Basic
|
||||||
|
|
||||||
|
```py
|
||||||
|
from dataclasses import dataclass, field
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Member:
|
||||||
|
name: str
|
||||||
|
role: str = field(default="user")
|
||||||
|
tag: str | None = field(default=None, init=False)
|
||||||
|
|
||||||
|
# TODO: this should not include the `tag` parameter, since it has `init=False` set
|
||||||
|
# revealed: (self: Member, name: str, role: str = Unknown, tag: str | None = Unknown) -> None
|
||||||
|
reveal_type(Member.__init__)
|
||||||
|
|
||||||
|
alice = Member(name="Alice", role="admin")
|
||||||
|
reveal_type(alice.role) # revealed: str
|
||||||
|
alice.role = "moderator"
|
||||||
|
|
||||||
|
# TODO: this should be an error, `tag` has `init=False`
|
||||||
|
bob = Member(name="Bob", tag="VIP")
|
||||||
|
```
|
||||||
|
|
||||||
|
## The `field` function
|
||||||
|
|
||||||
|
```py
|
||||||
|
from dataclasses import field
|
||||||
|
|
||||||
|
# TODO: this should be `Literal[1]`. This is currently blocked on enum support, because
|
||||||
|
# the `dataclasses.field` overloads make use of a `_MISSING_TYPE` enum, for which we
|
||||||
|
# infer a @Todo type, and therefore pick the wrong overload.
|
||||||
|
reveal_type(field(default=1)) # revealed: Unknown
|
||||||
|
```
|
Loading…
Add table
Add a link
Reference in a new issue