[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#67417: 29.1.50; c-ts-mode syntax issues with no brackets
From: |
Dmitry Gutov |
Subject: |
bug#67417: 29.1.50; c-ts-mode syntax issues with no brackets |
Date: |
Mon, 27 Nov 2023 04:22:50 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 |
On 27/11/2023 03:47, Yuan Fu wrote:
I pushed two commits which should fix the indentation for "break" after
"else", and indentation for empty lines after if/else/for/while in
general. The fix for the general case doesn't use the parse tree, since
the parse tree is often incomplete when you type if (...) and hit
return. Instead it uses a plain regexp match to see if the previous line
starts with if/else/for/while. This seems like a reasonable heuristic to
use before user types more things, at which point more accurate
indentation rules would be used, since the parse tree should be more
complete then.
Sorry, two counter-examples right away:
Type 'elsewhere();' and RET -> the next line is indented 1 level extra,
at least until you type some more and then have the line reindented
either with pressing TAB or adding semicolon.
Type 'for (;;) {}' and RET -> same.
The first case is easy to guard against (just check that the next char
is either space of opening paren), but the second one less so. OTOH, the
second case is likely to have a parse tree without errors, so if we also
check for that... the heuristic might work.