ruff/crates/ruff_linter/src
Brent Westbrook 92ecfc908b
[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.
2025-04-24 15:45:54 -04:00
..
checkers [syntax-errors] Make async-comprehension-in-sync-comprehension more specific (#17460) 2025-04-24 15:45:54 -04:00
comments Update insta snapshots (#14366) 2024-11-15 19:31:15 +01:00
cst
docstrings bump MSRV to 1.83 (#16294) 2025-02-26 06:12:43 -08:00
fix Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
importer Recognize all symbols named TYPE_CHECKING for in_type_checking_block (#15719) 2025-02-06 14:45:12 +01:00
message [pyflakes] Add fix safety section (F841) (#17410) 2025-04-17 09:58:26 -04:00
registry Increase rule set size (#14689) 2024-11-30 15:12:10 +01:00
rules [pyupgrade] Preserve parenthesis when fixing native literals containing newlines (UP018) (#17220) 2025-04-24 08:48:02 +02:00
settings Escape template filenames in glob patterns (#16407) 2025-03-03 09:29:58 -05:00
snapshots [syntax-errors] Make async-comprehension-in-sync-comprehension more specific (#17460) 2025-04-24 15:45:54 -04:00
codes.rs [airflow] Extract AIR311 from AIR301 rules (AIR301, AIR311) (#17310) 2025-04-16 11:06:57 -04:00
directives.rs Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
doc_lines.rs Extract LineIndex independent methods from Locator (#13938) 2024-10-28 07:53:41 +00:00
fs.rs Escape template filenames in glob patterns (#16407) 2025-03-03 09:29:58 -05:00
lib.rs Detect empty implicit namespace packages (#14236) 2024-11-09 22:03:34 -05:00
line_width.rs Upgrade to Rust 1.78 (#11260) 2024-05-03 12:46:21 +00:00
linter.rs [syntax-errors] Make async-comprehension-in-sync-comprehension more specific (#17460) 2025-04-24 15:45:54 -04:00
locator.rs test: another update to add back a caret 2025-01-15 13:37:52 -05:00
logging.rs dependencies: switch from chrono to jiff 2025-04-15 07:47:55 -04:00
noqa.rs Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
package.rs Detect empty implicit namespace packages (#14236) 2024-11-09 22:03:34 -05:00
packaging.rs
pyproject_toml.rs
registry.rs Sort linters alphabetically (#16168) 2025-02-14 22:05:08 +01:00
renamer.rs Add per-file-target-version option (#16257) 2025-02-24 08:47:13 -05:00
rule_redirects.rs [flake8-bandit] Move unsafe-markup-use from RUF035 to S704 (#15957) 2025-03-13 15:37:37 +01:00
rule_selector.rs Upgrade to Rust 1.86 and bump MSRV to 1.84 (#17171) 2025-04-03 15:59:44 +00:00
source_kind.rs Simplify iteration idioms (#13834) 2024-10-20 22:25:27 +01:00
test.rs [internal] Return Messages from check_path (#16837) 2025-03-19 10:08:07 -04:00
text_helpers.rs Handle non-printable characters in diff view (#11687) 2024-06-08 06:22:03 +00:00
upstream_categories.rs