From a7a464f65355a373b55b65f926b516427e507a39 Mon Sep 17 00:00:00 2001 From: Ali Hamdan Date: Sun, 10 Nov 2024 12:04:47 +0100 Subject: [PATCH 1/2] stubgen: do not include mypy generated symbols --- mypy/stubutil.py | 2 ++ test-data/unit/stubgen.test | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/mypy/stubutil.py b/mypy/stubutil.py index 3f917ca7665d5..50e6a46815dd2 100644 --- a/mypy/stubutil.py +++ b/mypy/stubutil.py @@ -832,6 +832,8 @@ def is_not_in_all(self, name: str) -> bool: return False def is_private_name(self, name: str, fullname: str | None = None) -> bool: + if name.startswith("__mypy-"): + return True # Never include mypy generated symbols if self._include_private: return False if fullname in self.EXTRA_EXPORTED: diff --git a/test-data/unit/stubgen.test b/test-data/unit/stubgen.test index e64c9c66d65dd..0801d9a270112 100644 --- a/test-data/unit/stubgen.test +++ b/test-data/unit/stubgen.test @@ -4508,3 +4508,21 @@ class C3[T3 = int]: ... class C4[T4: int | float = int](list[T4]): ... def f5[T5 = int]() -> None: ... + +[case testIgnoreMypyGeneratedMethods_semanal] +# flags: --include-private --python-version=3.13 +from typing_extensions import dataclass_transform + +# TODO: preserve dataclass_transform decorator +@dataclass_transform() +class DCMeta(type): ... +class DC(metaclass=DCMeta): + x: str + +[out] +class DCMeta(type): ... + +class DC(metaclass=DCMeta): + x: str + def __init__(self, x) -> None: ... + def __replace__(self, *, x) -> None: ... From cd09ad7abbc402124c10bd2548cb5cfcd4069752 Mon Sep 17 00:00:00 2001 From: Ali Hamdan Date: Mon, 11 Nov 2024 11:38:55 +0100 Subject: [PATCH 2/2] Future proof name mangling --- mypy/stubutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy/stubutil.py b/mypy/stubutil.py index 50e6a46815dd2..c11843c57f2ad 100644 --- a/mypy/stubutil.py +++ b/mypy/stubutil.py @@ -832,7 +832,7 @@ def is_not_in_all(self, name: str) -> bool: return False def is_private_name(self, name: str, fullname: str | None = None) -> bool: - if name.startswith("__mypy-"): + if "__mypy-" in name: return True # Never include mypy generated symbols if self._include_private: return False