bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#66845: 29.1; cmake-ts-mode indentation broken


From: Randy Taylor
Subject: bug#66845: 29.1; cmake-ts-mode indentation broken
Date: Tue, 07 Nov 2023 17:21:44 +0000

On Tuesday, November 7th, 2023 at 03:25, Yuan Fu <casouri@gmail.com> wrote:
> IMO it makes more sense to use prev-sibling:
> 
> ,@(ignore-errors
> (treesit-query-capture 'cmake '((body) @capture))
> `(((parent-is "body") prev-sibling 0)))
> 
> This would allow users to manually adjust the indentation of a line and have 
> the rest of the body follow that.

This would be much more elegant but unfortunately that and my previous patch 
failed to account for the following:

1 if(TRUE) # Comment.
2 endif()

And place POINT at the end of line 1 and hit RET. It will indent to the start 
of the comment :(. However, you gave me an idea: use the grand-parent as the 
anchor (which in this case is the if - exactly what we want). I've attached a 
new patch which accounts for that.

Juan, thanks for testing the first patch. Please give this new one a whirl if 
you're able to.

> 
> As for why parent-bol returns the BOL of the comment line, that’s expected: 
> The parent is body, and body starts at the comment, so of course the 
> beginning of the parent line is the beginning of the comment line. In the 
> image below, the highlighted portion marks the body node.
> 
> Some tree-sitter grammar would mark the beginning of body at the end of 
> if(TRUE), but what tree-sitter-cmake does here is equally valid.

Thanks, I understand what's happening now. Whenever line_comment is NOT the 
first child, the beginning of body is at the end of if(TRUE). If line_comment 
is the first child, then the beginning of body is at the start of the comment. 
I was expecting them to behave the same - that's why I was so confused, and I 
don't really understand why it was done that way.

Attachment: 0001-Fix-cmake-ts-mode-indentation-Bug-66845.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]