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

Ben Kunkle created

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.

Change summary

crates/languages/src/python/indents.scm | 15 +++++++++++++++
1 file changed, 15 insertions(+)

Detailed changes

crates/languages/src/python/indents.scm 🔗

@@ -1,3 +1,18 @@
 (_ "[" "]" @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