Skip to content

Comprehensions are inferred as Generator not AsyncGenerator when await keyword is used in the condition #1299

@Ontonator

Description

@Ontonator

Describe the Bug

import asyncio
import typing

async def some_async_func(x: int) -> bool:
    return x % 2 == 0

async def main() -> None:
    generator = (x for x in [1, 2, 3] if await some_async_func(x))
    typing.reveal_type(generator)
    assert await anext(generator) == 2

# asyncio nonsense to make this work in the sandbox
asyncio.ensure_future(main(), loop=asyncio.get_event_loop())

Python: 3.12

In the code snippet above, Pyrefly infers the type of generator to be Generator[int, None, None] rather than AsyncGenerator[int, None].

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSIEAtsbgE4AuABKnKegMYS4A661tRkwaliEdAHM%2BfVuw5NMMMEzi4qMAPqzOGsAFdOACnyIm4hgEomAWgB8TPLiiI%2BTN0zowGeuuib4mAFImACYmAF5wpgAGaXRteUVlKlRxQys7JgA5XHQYFz93CRg8ulQGegimYyYwSoDxJgBtAEYAGlCOgGYAXTNlVAB3VOZVdS02HX0jfAsLV3cRMUlCTwA3GFQoDSWYQ2LS8vp5wrdWOBghIZGWPPwGfZLLo7orSNC4hO5CErgfTX03k8hhSaQsHSguFwxHCX1whGKDA0MA26CRkOh6QsIDaIDInjAUFIhAqVCgFAAxEwAAqkAlElQYHAEJgcXKQCQ%2BcrcdCEPhUgDKMBgTAAFgwGMQ4IgAPQy-FKImEegSGUlGWYXAcOAytnoDlchg8mW1SqoNapKCobCwVnsiCcspG3JMaHO9BwPnoMgMUW5awbOhwHlVHggLqEFohMN8EAAX1xqA4Ro2ADFoDAKGgsHgiGR40A

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions