Skip to content

False positive with overloaded async iterators #2873

@grievejia

Description

@grievejia

Describe the Bug

Minimal repro:

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    typecheckingusabilityUsability & readiness issues identified with running Pyrefly on top OSS projectsv1-consider-addingTop-ranked but not in V1 milestone (consider adding)

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions