facebook / facebook/pyrefly

False positive with overloaded async iterators

Open
#2,873 2 comments 0 reactions 1 assignee Claimed by @asukaminato0721 View on GitHub
stale typechecking usability
Dominant language
Rust
Stars
7k
Forks
516
PR merge metrics
No merged PRs in 30d

Description

### Describe the Bug

Minimal repro:
```python
from collections.abc import AsyncIterator
from typing import Literal, overload

class Patch:
pass
class FullState(Patch):
pass

@overload
async def astream(*, diff: Literal[True] = ...) -> AsyncIterator[Patch]: ... # pyrefly FP: inconsistent-overload
@overload
async def astream(*, diff: Literal[False]) -> AsyncIterator[FullState]: ... # pyrefly FP: inconsistent-overload
async def astream(*, diff: bool = True) -> AsyncIterator[Patch] | AsyncIterator[FullState]:
"""Stream results as either diffs or accumulated state.

When diff=True, yields Patch objects (valid for AsyncIterator[Patch]).
When diff=False, yields FullState objects (valid for AsyncIterator[FullState]).
Pyrefly incorrectly flags the Patch yield as incompatible with FullState.
"""
if diff:
patch = Patch()
yield patch # pyrefly FP: invalid-yield
else:
state = FullState()
yield state
```

### Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEAxrlLAwC4S7pyGrYN0INYrkps6AQTil0DAJJsYlVG1EAddGGr02pYhHQBzQcNHiAMhEXKoAGjq4Abkqi5UmDRoZRUcOHQAFFQYAC0QNOki6Yl84Lx8-OgAxAFcWAGU2FRgACiC2UIBKcPQo6NjPdAABJxc3D3RfGQFMGDA6XzZKGFQaHIAqe0wIMDBEOktrVCgAbQAVShSYAF06AF46Qi3CugBaAD5JaVkFJRVRGfzQ5fGtwkiAYmjSbrAoUmSA8YMmbgg4RToNi7WqUVzuDQ1Zxg%2BoaJqyOitdqdbq9AZDEZjCZWM6zJLTOArHYHI7NU7KVSUGapDJZRQ3TZbR7PV7vT7fWRcOD-QHA0HghrwlptDoA1F9QaIzHjPDMdZ0BZLYmHKRkqaUy7BEKrAA%2BpJO6ouNKgmWyNwiUTUICtVsy4ro3TgaTY-l8dBgVhCSilo38og6DAYKRoaWymDoAOyhEqZQA6l7SsNRmtFTB7KQIDAoJh-FcQg5sAArGDsfw5RzTCDhsD%2B1UGs4avPLQrR0pReMwROYtb4qCE9OZ7P%2BY2mxQF4ulujlyvV2vHeSGqkjulE1tlAIvNpsn6ibrsNlvVCGfxsL2BLV0DNZ8NunfCFQQbCwOgAd09yTSJpXa8t1r-FsiEYfTGACynKAp8w2PMckKUCyivbNwNCZkyFZD4ki%2BQR0ArKAq12BCGjKLNCRKMCokjMcNmXbIYLgqICIjFcQFsEBUK3UhCFUGgoAoJ4NzQiMMBwAhGC4SBDBSClOHQVsnnSGAYDoEI2DYYg4EQAB6DS2LeDjREMDTOw0zBcAYOANN%2BcTJIfLgNLoGtKA6CtoD4Z9LIgCSpK4BxiA4LlWzIU8uF2aFuW8jYrQAZkIABGAAmG10BmJRqEoOBlg0FJ0CEEQxBgTBdmGPcOGceUAHIPPQUQYDKjQquBboAEcUggboCoAaxgUhdlQQN4H8DYypfVBKHQWr0BAABfFjepKmAkmgGAKDQLA8CIMgpqAA

### (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.