python: Fix incorrect indenting of except, finally, else, and elif control flow (#27428)

Closes #10832

Note: This PR only fixes the issue where when entering one of `except`,
`finally`, `else`, and `elif` after another block like so:

```python
try:
    for i in range(n):
        pass
except:|
```

The `except` would be indented resulting in the following:

```python
try:
    for i in range(n):
        pass
    except:|
```

This PR does not fix a separate issue in which the indentation is not
corrected from the second example to the first, i.e. if example 2 is
typed verbatim in Zed it will not auto-indent to look like example 1.
Handling of this case would likely require specific logic to handle, or
changes to the tree-sitter grammar for Python, as the current grammar
results in ERROR nodes that obscure the natural structure (cannot tie
the `except` to the `try`)

Release Notes:

- Fixed an issue where `except`, `finally`, `else`, and `elif` control
flow keywords in Python would be incorrectly indented when entered at
the correct level of indentation.
This commit is contained in:
Ben Kunkle 2025-03-25 09:58:41 -05:00 committed by GitHub
parent 7046b9641d
commit e273de5490
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,3 +1,18 @@
(_ "[" "]" @end) @indent (_ "[" "]" @end) @indent
(_ "{" "}" @end) @indent (_ "{" "}" @end) @indent
(_ "(" ")" @end) @indent (_ "(" ")" @end) @indent
(try_statement
body: (_) @start
[(except_clause) (finally_clause)] @end
) @indent
(if_statement
consequence: (_) @start
alternative: (_) @end
) @indent
(_
alternative: (elif_clause) @start
alternative: (_) @end
) @indent