ruff/crates/ty_python_semantic/resources
Douglas Creager 2214a46139
[ty] Don't use implicit superclass annotation when converting a class constructor into a `Callable` (#22011)
This fixes a bug @zsol found running ty against pyx. His original repro
is:

```py
class Base:
    def __init__(self) -> None: pass

class A(Base):
    pass

def foo[T](callable: Callable[..., T]) -> T:
    return callable()

a: A = foo(A)
```

The call at the bottom would fail, since we would infer `() -> Base` as
the callable type of `A`, when it should be `() -> A`.

The issue was how we add implicit annotations to `self` parameters.
Typically, we turn it into `self: Self`. But in cases where we don't
need to introduce a full typevar, we turn it into `self: [the class
itself]` — in this case, `self: Base`. Then, when turning the class
constructor into a callable, we would see this non-`Self` annotation and
think that it was important and load-bearing.

The fix is that we skip all implicit annotations when determining
whether the `self` annotation should take precedence in the callable's
return type.
2025-12-16 13:37:11 -05:00
..
corpus [ty] disallow explicit specialization of type variables themselves (#21938) 2025-12-12 15:49:20 -08:00
mdtest [ty] Don't use implicit superclass annotation when converting a class constructor into a `Callable` (#22011) 2025-12-16 13:37:11 -05:00
primer [ty] Add missing projects to `good.txt` (#21721) 2025-12-01 11:18:41 +01:00
README.md Rename Red Knot (#17820) 2025-05-03 19:49:15 +02:00

README.md

Markdown files within the mdtest/ subdirectory are tests of type inference and type checking; executed by the tests/mdtest.rs integration test.

See crates/ty_test/README.md for documentation of this test format.