Pyrefly should narrow subsequent match cases after `None` case
- Dominant language
- Rust
- Stars
- 7k
- Forks
- 516
- PR merge metrics
- No merged PRs in 30d
Description
### Describe the Bug
Pyrefly emits false positives on this code:
```
def example(a: list[int] | None, b: list[int] | None) -> list[int]:
match (a, b):
case (None, None):
return []
case (_, None):
return a # error: int | None not assignable to list[int]
case (None, _):
return b # error: int | None not assignable to list[int]
case _:
return a + b # error: int | None not assignable to list[int]
```
([sandbox](https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSImMYABDPqgLbGwAUqiNUEcALgNoR0vALo0APjQByudDAA0NbJ259BwsZJlyAlDQC0APi48BQ0YgA6AJ0voaNRql4BjABY12i7Dqu37DoEuqHAwntoK0rIwvjZ2gQmB1jC8AK7W9vwicQEJwaGeAPqKEbH%2BiYnJaRk0qBU0AMR01ta41pzmElFyNOi4vLVwcBAA5uio2LA0vLgmaubZ5Yn5YawRioVl8fUOVen22PVNMC1tHcJdEb39g8NjE1Mzc2YaORUrNIV%2B2zt7NXUAaiUCWOp3aNE6Wmi1wGITu40mYSeqheohA8hAZGSYCgpEIM0YUAoTQACqRsbiaGgsHh8DQXLJICN0s4ILJCHYmgBlGBhNy8XjEOCIAD0Iqx1FxhDaIxFMHQIswuBccBFDPQTJZvDZCpoYDatQAbqhoA8wurNdZWbIaLhiNrZHAOegyLw3LJ9IaTsMbQBeGiWEAAZkIAEYg4G7PwTq1rHBsuhUugIMw2rwYJh9JgIMkXNqvTR-QByUZ9ZJFux9Xj6ZIAR1SOYz%2BgA1jBSPpUC4XPA4IWaEWAO6oDIV9AgAC%2BGM7%2BZgADFoDAKNScAQSORx0A)). Pyright accepts it.
### Sandbox Link
_No response_
### (Only applicable for extension issues) IDE Information
_No response_
Contributor guide
Assessment
This issue has not been assessed yet.