diff --git a/crates/ty_python_semantic/resources/mdtest/ty_extensions.md b/crates/ty_python_semantic/resources/mdtest/ty_extensions.md index 8c3730e9b2..c6cec38db4 100644 --- a/crates/ty_python_semantic/resources/mdtest/ty_extensions.md +++ b/crates/ty_python_semantic/resources/mdtest/ty_extensions.md @@ -481,6 +481,10 @@ class Foo: def returns_self(self, x: int) -> Self: return self + @classmethod + def class_method(cls, x: int) -> Self: + return cls(x) + def _( c1: CallableTypeOf[f1], c2: CallableTypeOf[f2], @@ -488,6 +492,7 @@ def _( c4: CallableTypeOf[Foo], c5: CallableTypeOf[Foo(42).__call__], c6: CallableTypeOf[Foo(42).returns_self], + c7: CallableTypeOf[Foo.class_method], ) -> None: reveal_type(c1) # revealed: () -> Unknown reveal_type(c2) # revealed: () -> int @@ -499,4 +504,5 @@ def _( reveal_type(c5) # revealed: (x: int) -> str reveal_type(c6) # revealed: (x: int) -> Foo + reveal_type(c7) # revealed: (x: int) -> Foo ``` diff --git a/crates/ty_python_semantic/src/types/infer/builder/type_expression.rs b/crates/ty_python_semantic/src/types/infer/builder/type_expression.rs index 91e445d500..a841a2d361 100644 --- a/crates/ty_python_semantic/src/types/infer/builder/type_expression.rs +++ b/crates/ty_python_semantic/src/types/infer/builder/type_expression.rs @@ -1166,7 +1166,7 @@ impl<'db> TypeInferenceBuilder<'db, '_> { if let Some(bound_method) = argument_type.into_bound_method() { binding .signature - .bind_self(self.db(), Some(bound_method.self_instance(db))) + .bind_self(self.db(), Some(bound_method.typing_self_type(db))) } else { binding.signature.clone() }