GNU bug report logs - #59686
30.0.50; tree-sitter indentation in some loops and conditional statements is wrong

Previous Next

Package: emacs;

Reported by: Bruce Stephens <bruce.stephens <at> isode.com>

Date: Tue, 29 Nov 2022 18:42:01 UTC

Severity: normal

Merged with 60398, 60496

Found in versions 29.0.60, 30.0.50

Full log


View this message in rfc822 format

From: Theodor Thornhill <theo <at> thornhill.no>
To: Yuan Fu <casouri <at> gmail.com>, bruce.stephens <at> isode.com
Cc: 59686 <at> debbugs.gnu.org
Subject: bug#59686: 30.0.50; tree-sitter indentation in some loops and  conditional statements is wrong
Date: Fri, 02 Dec 2022 06:42:03 +0100

On 2 December 2022 06:13:42 CET, Yuan Fu <casouri <at> gmail.com> wrote:
>
>Bruce Stephens <bruce.stephens <at> isode.com> writes:
>
>> With the following file I would expect foo(i) to be indented to just two
>> indents (like the first one), but they are not. Similarly for many other
>> compound statements where the opening spans more than one line.
>>
>> // -*- c-ts -*-
>> int main() {
>>    for (int i=0; i<10; ++i) {
>>      foo(i);
>>    }
>>
>>    for (int i=0;
>>           i<10;
>>           ++i) {
>>             foo(i);
>>           }
>> }
>
>I see, that’s because the indent rule finds the BOL of the line where
>the "{" is on, and indents from there.  Theo, WDYT? Does indent style 
>fix this, or we should change the indent rules?
>
>Yuan

I've seen this issue myself, and have tried several combinations to fix it. It is trivial to fix this particular case, but because compound_statement is used everywhere problems will pop up other places. The fix here would be some grand-parent-bol function, but if my memory serves that would mess up the else in an if else. I'm happy to see this fixed, but just remember that it's not _super_ trivial.

Other languages exhibit similar issues, but with other constructs.

Lastly, I _did_ fix most of these, but that required using query as the matcher in simple-indent-rules, which made indenting slower, and I needed one rule for almost every construct in a language.

I'm sure she fix can be simple, but I'm a little blind to it right now. My eyes are bleeding tree-sitter nodes at the moment, so I might not see clearly :P




This bug report was last modified 2 years and 208 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.