From 65e950e42bdad4fca73ac23f42f40ecaa5d9bbee Mon Sep 17 00:00:00 2001 From: guitvcer Date: Thu, 27 Mar 2025 11:31:38 +0500 Subject: [PATCH 1/4] rm non-existing _DT from ordered dataclass --- mypy/plugins/dataclasses.py | 6 +----- test-data/unit/check-dataclasses.test | 12 ++++++++++++ test-data/unit/fixtures/tuple.pyi | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/mypy/plugins/dataclasses.py b/mypy/plugins/dataclasses.py index 90c983b0bacd..57d3b5208f48 100644 --- a/mypy/plugins/dataclasses.py +++ b/mypy/plugins/dataclasses.py @@ -291,11 +291,7 @@ def transform(self) -> bool: self._api, self._cls, "__init__", args=args, return_type=NoneType() ) - if ( - decorator_arguments["eq"] - and info.get("__eq__") is None - or decorator_arguments["order"] - ): + if decorator_arguments["eq"] and info.get("__eq__") is None: # Type variable for self types in generated methods. obj_type = self._api.named_type("builtins.object") self_tvar_expr = TypeVarExpr( diff --git a/test-data/unit/check-dataclasses.test b/test-data/unit/check-dataclasses.test index 887a9052d0b9..e51a66b953a7 100644 --- a/test-data/unit/check-dataclasses.test +++ b/test-data/unit/check-dataclasses.test @@ -2594,3 +2594,15 @@ class B2(B1): # E: A NamedTuple cannot be a dataclass pass [builtins fixtures/tuple.pyi] + +[case testOrderedDataclassSelfTVARNotExist] +from dataclasses import dataclass + +@dataclass(order=True) +class A: + b: int + +a = A(1) +a._DT # E: "A" has no attribute "_DT" + +[builtins fixtures/tuple.pyi] diff --git a/test-data/unit/fixtures/tuple.pyi b/test-data/unit/fixtures/tuple.pyi index d01cd0034d26..544ef12e94ed 100644 --- a/test-data/unit/fixtures/tuple.pyi +++ b/test-data/unit/fixtures/tuple.pyi @@ -9,6 +9,7 @@ _Tco = TypeVar('_Tco', covariant=True) class object: def __init__(self) -> None: pass def __new__(cls) -> Self: ... + def __eq__(self, other) -> bool: pass class type: def __init__(self, *a: object) -> None: pass From bd56e277df55d96e51aaa856b767e7ef233d28d7 Mon Sep 17 00:00:00 2001 From: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Date: Thu, 27 Mar 2025 00:18:07 -0700 Subject: [PATCH 2/4] Update test-data/unit/fixtures/tuple.pyi --- test-data/unit/fixtures/tuple.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-data/unit/fixtures/tuple.pyi b/test-data/unit/fixtures/tuple.pyi index 544ef12e94ed..22462023aad4 100644 --- a/test-data/unit/fixtures/tuple.pyi +++ b/test-data/unit/fixtures/tuple.pyi @@ -9,7 +9,7 @@ _Tco = TypeVar('_Tco', covariant=True) class object: def __init__(self) -> None: pass def __new__(cls) -> Self: ... - def __eq__(self, other) -> bool: pass + def __eq__(self, other: object) -> bool: pass class type: def __init__(self, *a: object) -> None: pass From 259e0e14e0a86f38b44aad545e0e80ee34d87398 Mon Sep 17 00:00:00 2001 From: guitvcer Date: Mon, 31 Mar 2025 17:13:10 +0500 Subject: [PATCH 3/4] rm non-existing _DT from eq=True dataclass --- mypy/plugins/dataclasses.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/mypy/plugins/dataclasses.py b/mypy/plugins/dataclasses.py index 57d3b5208f48..ae063b81b7fb 100644 --- a/mypy/plugins/dataclasses.py +++ b/mypy/plugins/dataclasses.py @@ -291,18 +291,6 @@ def transform(self) -> bool: self._api, self._cls, "__init__", args=args, return_type=NoneType() ) - if decorator_arguments["eq"] and info.get("__eq__") is None: - # Type variable for self types in generated methods. - obj_type = self._api.named_type("builtins.object") - self_tvar_expr = TypeVarExpr( - SELF_TVAR_NAME, - info.fullname + "." + SELF_TVAR_NAME, - [], - obj_type, - AnyType(TypeOfAny.from_omitted_generics), - ) - info.names[SELF_TVAR_NAME] = SymbolTableNode(MDEF, self_tvar_expr) - # Add <, >, <=, >=, but only if the class has an eq method. if decorator_arguments["order"]: if not decorator_arguments["eq"]: From a5e4c77fe7da5a534202f1745d5013e8a5a90c80 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 12:16:55 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- mypy/plugins/dataclasses.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mypy/plugins/dataclasses.py b/mypy/plugins/dataclasses.py index ae063b81b7fb..50e9c927df9d 100644 --- a/mypy/plugins/dataclasses.py +++ b/mypy/plugins/dataclasses.py @@ -40,7 +40,6 @@ TempNode, TypeAlias, TypeInfo, - TypeVarExpr, Var, ) from mypy.plugin import ClassDefContext, FunctionSigContext, SemanticAnalyzerPluginInterface