Thanks for the patch. I've not tested this patch adequately, but I found an issue: java-ts-mode indents the body of `else if` with one more level of indentation. ``` public class T { int f() { int a = 0; int b = 1; if (a == 0 && b == 1) { // indentation ok return 0; } else if (a == 1 ) { // indentation more return 1; } } } ``` If the second branch of the if-statement is just an `else` (not `else if`), the body of it will be indented correctly. I've also tested c-ts-mode (use 'linux as c-ts-mode-indent-style) and it also has this kind of problem. ``` int main() { int a = 0; if (a == 0) { // indentation ok } else if (a == 2) { // indentation more } } ``` ________________________________ 发件人: Theodor Thornhill 发送时间: 2023年2月5日 15:53 收件人: 太阳 抄送: 61142@debbugs.gnu.org <61142@debbugs.gnu.org> 主题: Re: bug#61142: 29.0.60; java-ts-mode - Wrong indentation for the body of multiple lines conditions Theodor Thornhill writes: > 太阳 writes: > >> After reading treesit's manual, I found that we can use `n-p-gp` as the matcher >> and `grand-parent` as the anchor to match the body of `if` (and `while`, which >> has a similar issue). >> >> I mean a rule looks like the following: >> >> ``` >> ((n-p-gp nil "block" "if_statement") grand-parent java-ts-mode-indent-offset) >> ``` >> >> > > > Thanks! We have a mechanism in place for this, see > 'c-ts-common-statement-offset' in 'c-ts-common.el'. I didn't get to it > yet, but I'll try to look at it this evening, unless you want to? See > c-ts-mode for examples of how to use it, if you're interested! > > Theo Hi again! Can you test this patch for me? @Eli: Is this ok for emacs-29? I'd love to add some test for this, but now they are on the master branch. What is the common procedure to move stuff from master branch to the release branch? I _can_ just add some test to the master branch, but it would be nice to have them on emacs-29 too :-) Theo