[red-knot] Fix fully static check for callable type (#16803)

## Summary

This PR fixes a bug in the check for fully static callable type where we
would skip unannotated parameter type.

## Test Plan

Add tests using the new `CallableTypeFromFunction` special form.
This commit is contained in:
Dhruv Manilawala
2025-03-17 20:01:30 +05:30
committed by GitHub
parent 75a562d313
commit 3ccc8dbbf9
2 changed files with 25 additions and 1 deletions

View File

@@ -75,3 +75,27 @@ static_assert(not is_fully_static(Callable))
# error: [invalid-type-form]
static_assert(not is_fully_static(Callable[int, int]))
```
Using function literals, we can check more variations of callable types as it allows us to define
parameters without annotations and no return type.
```py
from knot_extensions import CallableTypeFromFunction, is_fully_static, static_assert
def f00() -> None: ...
def f01(a: int, b: str) -> None: ...
def f11(): ...
def f12(a, b): ...
def f13(a, b: int): ...
def f14(a, b: int) -> None: ...
def f15(a, b) -> None: ...
static_assert(is_fully_static(CallableTypeFromFunction[f00]))
static_assert(is_fully_static(CallableTypeFromFunction[f01]))
static_assert(not is_fully_static(CallableTypeFromFunction[f11]))
static_assert(not is_fully_static(CallableTypeFromFunction[f12]))
static_assert(not is_fully_static(CallableTypeFromFunction[f13]))
static_assert(not is_fully_static(CallableTypeFromFunction[f14]))
static_assert(not is_fully_static(CallableTypeFromFunction[f15]))
```