[syntax-errors] Make async-comprehension-in-sync-comprehension more specific (#17460)

## Summary

While adding semantic error support to red-knot, I noticed duplicate
diagnostics for code like this:

```py
# error: [invalid-syntax] "cannot use an asynchronous comprehension outside of an asynchronous function on Python 3.9 (syntax was added in 3.11)"
# error: [invalid-syntax] "`asynchronous comprehension` outside of an asynchronous function"
 [reveal_type(x) async for x in AsyncIterable()]
```

Beyond the duplication, the first error message doesn't make much sense
because this syntax is _not_ allowed on Python 3.11 either.

To fix this, this PR renames the
`async-comprehension-outside-async-function` semantic syntax error to
`async-comprehension-in-sync-comprehension` and fixes the rule to avoid
applying outside of sync comprehensions at all.

## Test Plan

New linter test demonstrating the false positive. The mdtests from my red-knot 
PR also reflect this change.
This commit is contained in:
Brent Westbrook 2025-04-24 15:45:54 -04:00 committed by GitHub
parent f7b48510b5
commit 92ecfc908b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 25 additions and 21 deletions

View file

@ -1022,6 +1022,7 @@ mod tests {
",
PythonVersion::PY310
)]
#[test_case("false_positive", "[x async for x in y]", PythonVersion::PY310)]
fn test_async_comprehension_in_sync_comprehension(
name: &str,
contents: &str,