6395a5fb5d
## Summary - Fixes `ty` type checker reporting `error[no-matching-overload]` when calling `Sandbox.kill()` (and all other methods using the `class_method_variant` pattern) - Single 2-line change: make `class_method_variant` inherit from `Generic[T]` instead of `object` ## Problem The `class_method_variant` descriptor uses `cast(T, self)` to tell type checkers that the decorator preserves the original function's type. Without `Generic[T]`, `T` is only a method-level TypeVar — `ty` doesn't trust the cast and fails to resolve overloads at call sites. `mypy` and `pyright` are more lenient and accept it either way. Affected methods (both `Sandbox` and `AsyncSandbox`): `kill`, `connect`, `set_timeout`, `get_info`, `get_metrics`, `beta_pause`. ## Fix Adding `Generic[T]` makes `T` a class-level type parameter, so `ty` can track the type binding through the descriptor (`class_method_variant[(self, **opts) -> bool]`). The cast then makes sense to all three type checkers. ## Verification Tested with a consumer repro (`sandbox.kill()`) against: | Type Checker | Before | After | |---|---|---| | ty 0.0.15 | `error[no-matching-overload]` | All checks passed | | mypy 1.19.1 | All checks passed | All checks passed | | pyright 1.1.408 | All checks passed | All checks passed | ## Test plan - [x] Verified `ty check` passes on consumer-side repro - [x] Verified `mypy` and `pyright` still pass (no regressions) - [x] Verified Python syntax is valid - [x] No runtime behavior change (`Generic[T]` only affects type-level metadata)
Changesets
To add changeset run:
npx changeset
in the root of the project. This will create a new changeset in the .changeset folder.