@@ -3104,15 +3104,12 @@ class C:
31043104 x = attrs.field()
31053105
31063106[out]
3107- from _typeshed import Incomplete
3107+ import attrs
31083108
3109+ @attrs.define
31093110class C:
3110- x: Incomplete
3111+ x = ...
31113112 def __init__(self, x) -> None: ...
3112- def __lt__(self, other): ...
3113- def __le__(self, other): ...
3114- def __gt__(self, other): ...
3115- def __ge__(self, other): ...
31163113
31173114[case testNamedTupleInClass]
31183115from collections import namedtuple
@@ -4249,6 +4246,122 @@ class Y(missing.Base):
42494246 generated_kwargs_: float
42504247 def __init__(self, *generated_args__, generated_args, generated_args_, generated_kwargs, generated_kwargs_, **generated_kwargs__) -> None: ...
42514248
4249+ [case testDataclassTransform]
4250+ # dataclass_transform detection only works with sementic analysis.
4251+ # Test stubgen doesn't break too badly without it.
4252+ from typing_extensions import dataclass_transform
4253+
4254+ @typing_extensions.dataclass_transform(kw_only_default=True)
4255+ def create_model(cls):
4256+ return cls
4257+
4258+ @create_model
4259+ class X:
4260+ a: int
4261+ b: str = "hello"
4262+
4263+ @typing_extensions.dataclass_transform(kw_only_default=True)
4264+ class ModelBase: ...
4265+
4266+ class Y(ModelBase):
4267+ a: int
4268+ b: str = "hello"
4269+
4270+ @typing_extensions.dataclass_transform(kw_only_default=True)
4271+ class DCMeta(type): ...
4272+
4273+ class Z(metaclass=DCMeta):
4274+ a: int
4275+ b: str = "hello"
4276+
4277+ [out]
4278+ @typing_extensions.dataclass_transform(kw_only_default=True)
4279+ def create_model(cls): ...
4280+
4281+ class X:
4282+ a: int
4283+ b: str
4284+
4285+ @typing_extensions.dataclass_transform(kw_only_default=True)
4286+ class ModelBase: ...
4287+
4288+ class Y(ModelBase):
4289+ a: int
4290+ b: str
4291+
4292+ @typing_extensions.dataclass_transform(kw_only_default=True)
4293+ class DCMeta(type): ...
4294+
4295+ class Z(metaclass=DCMeta):
4296+ a: int
4297+ b: str
4298+
4299+ [case testDataclassTransformDecorator_semanal]
4300+ import typing_extensions
4301+
4302+ @typing_extensions.dataclass_transform(kw_only_default=True)
4303+ def create_model(cls):
4304+ return cls
4305+
4306+ @create_model
4307+ class X:
4308+ a: int
4309+ b: str = "hello"
4310+
4311+ [out]
4312+ import typing_extensions
4313+
4314+ @typing_extensions.dataclass_transform(kw_only_default=True)
4315+ def create_model(cls): ...
4316+
4317+ @create_model
4318+ class X:
4319+ a: int
4320+ b: str = ...
4321+ def __init__(self, *, a, b=...) -> None: ...
4322+
4323+ [case testDataclassTransformClass_semanal]
4324+ from typing_extensions import dataclass_transform
4325+
4326+ @dataclass_transform(kw_only_default=True)
4327+ class ModelBase: ...
4328+
4329+ class X(ModelBase):
4330+ a: int
4331+ b: str = "hello"
4332+
4333+ [out]
4334+ from typing_extensions import dataclass_transform
4335+
4336+ @dataclass_transform(kw_only_default=True)
4337+ class ModelBase: ...
4338+
4339+ class X(ModelBase):
4340+ a: int
4341+ b: str = ...
4342+ def __init__(self, *, a, b=...) -> None: ...
4343+
4344+ [case testDataclassTransformMetaclass_semanal]
4345+ from typing_extensions import dataclass_transform
4346+
4347+ @dataclass_transform(kw_only_default=True)
4348+ class DCMeta(type): ...
4349+
4350+ class X(metaclass=DCMeta):
4351+ a: int
4352+ b: str = "hello"
4353+
4354+ [out]
4355+ from typing_extensions import dataclass_transform
4356+
4357+ @dataclass_transform(kw_only_default=True)
4358+ class DCMeta(type): ...
4359+
4360+ class X(metaclass=DCMeta):
4361+ a: int
4362+ b: str = ...
4363+ def __init__(self, *, a, b=...) -> None: ...
4364+
42524365[case testAlwaysUsePEP604Union]
42534366import typing
42544367import typing as t
@@ -4536,16 +4649,17 @@ def f5[T5 = int]() -> None: ...
45364649# flags: --include-private --python-version=3.13
45374650from typing_extensions import dataclass_transform
45384651
4539- # TODO: preserve dataclass_transform decorator
45404652@dataclass_transform()
45414653class DCMeta(type): ...
45424654class DC(metaclass=DCMeta):
45434655 x: str
45444656
45454657[out]
4658+ from typing_extensions import dataclass_transform
4659+
4660+ @dataclass_transform()
45464661class DCMeta(type): ...
45474662
45484663class DC(metaclass=DCMeta):
45494664 x: str
45504665 def __init__(self, x) -> None: ...
4551- def __replace__(self, *, x) -> None: ...
0 commit comments