GNU bug report logs - #60602
29.0.60; treesit-simple-indent doesn't work for top-level nodes

Previous Next

Package: emacs;

Reported by: Piotr Trojanek <piotr.trojanek <at> gmail.com>

Date: Fri, 6 Jan 2023 13:42:02 UTC

Severity: normal

Found in version 29.0.60

Fixed in version 30.1

Done: Stefan Kangas <stefankangas <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Theodor Thornhill <theo <at> thornhill.no>
To: Yuan Fu <casouri <at> gmail.com>
Cc: Dmitry Gutov <dgutov <at> yandex.ru>, 60602 <at> debbugs.gnu.org, piotr.trojanek <at> gmail.com
Subject: bug#60602: 29.0.60; treesit-simple-indent doesn't work for top-level nodes
Date: Fri, 20 Jan 2023 22:40:51 +0100
[Message part 1 (text/plain, inline)]
Hi there!

Yuan Fu <casouri <at> gmail.com> writes:

> Piotr Trojanek <piotr.trojanek <at> gmail.com> writes:
>
>> This problem can be reproduced with a correctly configured c-ts-mode,
>> which fails to indent the first line of a code like this, i.e. with
>> extra space at the very beginning of file and cursor positioned at
>> "main"):
>>
>> ===
>>    int main (int argc, char *argv[])
>> {
>>   return 0;
>> }
>> ===
>>
>> The intent of c-ts-mode--indent-styles is clearly to indent this line
>> to 0th column:
>>
>> (defun c-ts-mode--indent-styles (mode)
>>   ...
>>          `(((parent-is "translation_unit") parent-bol 0)
>>
>> However, when indenting this line treesit-simple-indent is called with
>> node=translation_unit and parent=nil. It exits too early and doesn't
>> consider any indentation rules:
>>
>> (defun treesit-simple-indent (node parent bol)
>>   "..."
>>   (if (null parent)
>>       (progn (when treesit--indent-verbose
>>                (message "PARENT is nil, not indenting"))
>>              (cons nil nil))
>>
>> Note that other tree-sitter modes have similar indentation rules, e.g.
>> ruby-ts-mode.el:
>>
>>    ;; Slam all top level nodes to the left margin
>>    ((parent-is "program") parent 0)
>>
>> and same for typescript-ts-mode.el:
>>
>>   ((parent-is "program") parent-bol 0)
>>
>> Perhaps the early exit from treesit-simple-indent could be removed, so
>> the indentation rules can decide how to handle a nil parent.
>
> Now NODE is never the root node, so parent is never nil. I believe this
> is the best approach.  And personally I think the rule should be
>
> ((parent-is "program") point-min 0)
>
> Yuan

You okay with this patch, Piotr and Dmitry?

Theo

[0001-Use-point-min-to-anchor-top-level-constructs-bug-606.patch (text/x-patch, attachment)]

This bug report was last modified 1 year and 338 days ago.

Previous Next


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