From 3059fcd06773a687656587bb94d1aaa985434ac5 Mon Sep 17 00:00:00 2001 From: daleselaji-dev <265319989+daleselaji-dev@users.noreply.github.com> Date: Tue, 1 Sep 2026 10:50:09 +0800 Subject: [PATCH] fix(dataclasses): skip non-Var ClassVars --- mypy/plugins/dataclasses.py | 6 +++++- test-data/unit/check-dataclasses.test | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) 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