diff --git a/crates/ruff_linter/resources/test/fixtures/flake8_comprehensions/C419.py b/crates/ruff_linter/resources/test/fixtures/flake8_comprehensions/C419.py index 311364095af1e..480f6a4daadd0 100644 --- a/crates/ruff_linter/resources/test/fixtures/flake8_comprehensions/C419.py +++ b/crates/ruff_linter/resources/test/fixtures/flake8_comprehensions/C419.py @@ -55,3 +55,14 @@ async def f() -> bool: # should not be linted... sum({x.id for x in bar}) + + +# https://github.com/astral-sh/ruff/issues/12891 +from collections.abc import AsyncGenerator + + +async def test() -> None: + async def async_gen() -> AsyncGenerator[bool, None]: + yield True + + assert all([v async for v in async_gen()]) # OK diff --git a/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_comprehension_in_call.rs b/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_comprehension_in_call.rs index 6897e224f3bbe..12dcb9842c2d8 100644 --- a/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_comprehension_in_call.rs +++ b/crates/ruff_linter/src/rules/flake8_comprehensions/rules/unnecessary_comprehension_in_call.rs @@ -100,14 +100,21 @@ pub(crate) fn unnecessary_comprehension_in_call( let Some(arg) = args.first() else { return; }; - let (Expr::ListComp(ast::ExprListComp { elt, .. }) - | Expr::SetComp(ast::ExprSetComp { elt, .. })) = arg + let (Expr::ListComp(ast::ExprListComp { + elt, generators, .. + }) + | Expr::SetComp(ast::ExprSetComp { + elt, generators, .. + })) = arg else { return; }; if contains_await(elt) { return; } + if generators.iter().any(|generator| generator.is_async) { + return; + } let Some(Ok(builtin_function)) = checker .semantic() .resolve_builtin_symbol(func)