diff --git a/mypy/plugins/dataclasses.py b/mypy/plugins/dataclasses.py index a511e714ac6b4..37a2f5d8f7d62 100644 --- a/mypy/plugins/dataclasses.py +++ b/mypy/plugins/dataclasses.py @@ -600,7 +600,11 @@ def collect_attributes(self) -> list[DataclassAttribute] | None: # We will issue an error later. continue - assert isinstance(node, Var), node + # A ClassVar assigned a class definition, such as a TypedDict, + # can be represented by a TypeInfo rather than a Var. Dataclasses + # ignore ClassVars, so there is no attribute to collect here. + if not isinstance(node, Var): + continue # x: ClassVar[int] is ignored by dataclasses. if node.is_classvar: diff --git a/test-data/unit/check-dataclasses.test b/test-data/unit/check-dataclasses.test index f43ac255373e6..0c6e8f9d36e29 100644 --- a/test-data/unit/check-dataclasses.test +++ b/test-data/unit/check-dataclasses.test @@ -1,3 +1,17 @@ +[case testClassVarTypedDict] +import dataclasses +from typing import ClassVar, TypedDict + +@dataclasses.dataclass +class X: + value: int + TD: ClassVar = TypedDict("TD", {"value": int}) + +X.TD + +[builtins fixtures/tuple.pyi] +[typing fixtures/typing-medium.pyi] + [case testDataclassesBasic] from dataclasses import dataclass