mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-03 10:23:11 +00:00
[syntax-errors] Parenthesized context managers before Python 3.9 (#16523)
Summary -- I thought this was very complicated based on the comment here: https://github.com/astral-sh/ruff/pull/16106#issuecomment-2653505671 and on some of the discussion in the CPython issue here: https://github.com/python/cpython/issues/56991. However, after a little bit of experimentation, I think it boils down to this example: ```python with (x as y): ... ``` The issue is parentheses around a `with` item with an `optional_var`, as we (and [Python](https://docs.python.org/3/library/ast.html#ast.withitem)) call the trailing variable name (`y` in this case). It's not actually about line breaks after all, except that line breaks are allowed in parenthesized expressions, which explains the validity of cases like ```pycon >>> with ( ... x, ... y ... ) as foo: ... pass ... ``` even on Python 3.8. I followed [pyright]'s example again here on the diagnostic range (just the opening paren) and the wording of the error. Test Plan -- Inline tests [pyright]: https://pyright-play.net/?pythonVersion=3.7&strict=true&code=FAdwlgLgFgBAFAewA4FMB2cBEAzBCB0EAHhJgJQwCGAzjLgmQFwz6tA
This commit is contained in:
parent
8d3643f409
commit
75a562d313
10 changed files with 800 additions and 0 deletions
|
@ -0,0 +1,4 @@
|
|||
# parse_options: {"target-version": "3.9"}
|
||||
with (foo as x, bar as y): ...
|
||||
with (foo, bar as y): ...
|
||||
with (foo as x, bar): ...
|
|
@ -0,0 +1,6 @@
|
|||
# parse_options: {"target-version": "3.8"}
|
||||
with (
|
||||
foo,
|
||||
bar,
|
||||
baz,
|
||||
) as tup: ...
|
Loading…
Add table
Add a link
Reference in a new issue