Brent Westbrook
71f8389f61
Fix syntax error false positives on parenthesized context managers ( #20846 )
...
This PR resolves the issue noticed in
https://github.com/astral-sh/ruff/pull/20777#discussion_r2417233227 .
Namely, cases like this were being flagged as syntax errors despite
being perfectly valid on Python 3.8:
```pycon
Python 3.8.20 (default, Oct 2 2024, 16:34:12)
[Clang 18.1.8 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> with (open("foo.txt", "w")): ...
...
Ellipsis
>>> with (open("foo.txt", "w")) as f: print(f)
...
<_io.TextIOWrapper name='foo.txt' mode='w' encoding='UTF-8'>
```
The second of these was already allowed but not the first:
```shell
> ruff check --target-version py38 --ignore ALL - <<EOF
with (open("foo.txt", "w")): ...
with (open("foo.txt", "w")) as f: print(f)
EOF
invalid-syntax: Cannot use parentheses within a `with` statement on Python 3.8 (syntax was added in Python 3.9)
--> -:1:6
|
1 | with (open("foo.txt", "w")): ...
| ^
2 | with (open("foo.txt", "w")) as f: print(f)
|
Found 1 error.
```
There was some discussion of related cases in
https://github.com/astral-sh/ruff/pull/16523#discussion_r1984657793 , but
it seems I overlooked the single-element case when flagging tuples. As
suggested in the other thread, we can just check if there's more than
one element or a trailing comma, which will cause the tuple parsing on
<=3.8 and avoid the false positives.
2025-10-13 14:13:27 -04:00
..
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-05-22 07:52:21 +02:00
2024-11-15 19:31:15 +01:00
2024-12-09 09:32:12 +00:00
2025-01-09 10:20:06 +01:00
2025-06-18 14:56:15 +02:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-03 11:49:26 +00:00
2024-11-15 19:31:15 +01:00
2024-11-03 11:49:26 +00:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2025-04-11 10:21:47 +02:00
2025-10-07 12:23:11 -04:00
2025-10-07 12:23:11 -04:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-12-09 09:32:12 +00:00
2025-10-07 12:23:11 -04:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-02-18 08:43:51 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2025-05-30 15:00:56 -05:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2025-10-13 10:00:37 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-07-27 12:41:03 +00:00
2025-10-07 12:23:11 -04:00
2025-07-27 12:41:03 +00:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2025-07-27 12:41:03 +00:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2025-06-15 06:53:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-05-22 07:52:21 +02:00
2025-05-22 07:52:21 +02:00
2025-10-07 12:23:11 -04:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-12-09 09:32:12 +00:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-01-09 10:20:06 +01:00
2025-01-09 10:20:06 +01:00
2025-01-09 10:20:06 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-02-18 12:03:13 -05:00
2025-10-13 14:13:27 -04:00
2025-10-07 12:23:11 -04:00
2025-10-07 12:23:11 -04:00
2024-11-15 19:31:15 +01:00
2025-06-24 16:25:44 +02:00
2024-11-15 19:31:15 +01:00
2024-11-15 19:31:15 +01:00
2025-06-24 16:25:44 +02:00
2025-10-07 12:23:11 -04:00
2025-06-07 16:02:43 +02:00
2024-11-15 19:31:15 +01:00