facebook / facebook/pyrefly

`invalid-variance` false negative when typevar is part of a union or used in another type

Open
#3,535 0 comments 1 reaction 0 assignees View on GitHub
typechecking
Dominant language
Rust
Stars
7k
Forks
516
PR merge metrics
No merged PRs in 30d

Description

### Describe the Bug

```python
from typing import TypeVar, Generic, Iterable

_T_co = TypeVar("_T_co", covariant=True)

class Foo(Generic[_T_co]):
def foo(self, instance: _T_co) -> None: ... # error
def bar(self, instance: _T_co | None) -> None: ... # no error
def baz(self, instance: Iterable[_T_co]) -> None: ... # no error
```

Python: 3.14

### Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN0AVZjABqqSgBo6AcRjoYlCAGMpASQYLU2WAB10egPoCDS3HQC8g4WMoAKHSCMncDqaYBu4iBgbmBlAFcYAEo9PSUoVDg4OgAxXFxbWXlFJQBtJ1MAXWDEPToCukwYMDowBNs4GCgwKVY4BgwlGEQ6TNxgugBaAD46ADlceVbCUboAYjoFakp8wuLS7HFK6trOdAamlrbjUzoAHwGhkO6%2BweG6UcIJunQzad45goW6JYAvFZq6jcb0Ztb1JptDAMrtcDlTkcLlcbncppQZiAJCAyJQSlBSIQGLQoBQyAwABZDLruBRwCBDCx0BwAZkIAEYACwOPRpB6UOBZPTFYhopSoDSYKkOdkOanoLjEKDKCAMLpaBqUVBKOURKIxSwihGPEB6SXSpSyrqS3j8TUgUUgcX6mUMDFdBasGCYeUMBiKbABDTCi3a2a69A0CDRVhsLpwXABSjNH2WvR3dBdGD4AmoAINCCkro0AVKAmxv0s9B3OVogCOAQgaJdAGsYKR5UpmtECzMi7hiHIugF0MRlTXQ62deLqz3MD4uvyGkP-SPnWOJ6YsLKKegZ2K9D35M20JQG6ZuF4I2vzZa56TUFAukxO%2BurZNWOVN8WYDvxA2bzBJ0NSRzV3fxR7NFlVTYEAOfYC8y0WBs1zAlJyiGBwPQID4FwKBPGBB0xwUeUoCgZCe0-F0TT4QiUKqEi2DuNFkM8RQtmzYMcwYPNkNYTxpRdYpTCVbFKDvEAAF9kWVBhMxgWJoBgCg0CwPAiDIYSgA

### (Only applicable for extension issues) IDE Information

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.