From 73df97dcdc302fe520b8fdbd2d10d617ac3dd158 Mon Sep 17 00:00:00 2001 From: Ivan Levkivskyi Date: Fri, 29 May 2026 00:09:27 +0100 Subject: [PATCH] Fix crash on deferred generic class nested in function --- mypy/semanal.py | 3 ++- test-data/unit/check-newsemanal.test | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/mypy/semanal.py b/mypy/semanal.py index e3524f2c7db6..92f5c3d44333 100644 --- a/mypy/semanal.py +++ b/mypy/semanal.py @@ -1156,7 +1156,8 @@ def prepare_method_signature(self, func: FuncDef, info: TypeInfo, has_self_type: leading_type = fill_typevars(info) if func.is_class or func.name == "__new__": leading_type = self.class_type(leading_type) - func.type = replace_implicit_first_type(functype, leading_type) + if not has_placeholder(leading_type): + func.type = replace_implicit_first_type(functype, leading_type) elif has_self_type and isinstance(func.unanalyzed_type, CallableType): if not isinstance(get_proper_type(func.unanalyzed_type.arg_types[0]), AnyType): if self.is_expected_self_type( diff --git a/test-data/unit/check-newsemanal.test b/test-data/unit/check-newsemanal.test index b0b01ad3a593..cfb59a9f8e9b 100644 --- a/test-data/unit/check-newsemanal.test +++ b/test-data/unit/check-newsemanal.test @@ -3228,3 +3228,16 @@ def deco(fn: Callable[[], T]) -> Callable[[], T]: ... @deco def defer() -> int: ... + +[case testNestedClassSelfNoPlaceholder] +from typing import Generic, TypeVar + +def test() -> None: + T = TypeVar("T", bound="Model") + + class Query(Generic[T]): + def filter(self, value: T) -> None: + ... + + class Model: + pass