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.