GNU bug report logs -
#71086
30.0.50; Setting treesit-indent-function is not effective is treesit-simple-indent-rules is nil
Previous Next
Reported by: Óscar Fuentes <ofv <at> wanadoo.es>
Date: Tue, 21 May 2024 01:33:02 UTC
Severity: normal
Found in version 30.0.50
Done: Óscar Fuentes <ofv <at> wanadoo.es>
Bug is archived. No further changes may be made.
Full log
Message #11 received at 71086 <at> debbugs.gnu.org (full text, mbox):
> On May 21, 2024, at 4:43 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>
>> From: Óscar Fuentes <ofv <at> wanadoo.es>
>> Date: Tue, 21 May 2024 03:32:05 +0200
>>
>>
>> treesit-major-mode-setup setups indentation if and only if
>> treesit-simple-indent-rules is non-nil. So the major mode author is
>> forced to set that variable even when he makes no use of the
>> treesit-simple-indent facilities and instead sets
>> treesit-indent-function to his own function.
>
> If your mode defines a treesit-indent-function, why do you need the
> help of treesit-major-mode-setup for setting up indentation?
>
> The idea of treesit-simple-indent, AFAIU, is to automate the simple
> cases, on the assumption that the mode complex cases cannot be
> second-guessed up front, and the mode programmer will need to set that
> up manually. For example, you can assign your functions to
> indent-line-function and indent-region-function. Or what am I
> missing?
There are actually another level of customization between setting treesit-simple-indent-rules and setting indent-line-function, which is setting treesit-indent-function. IIUC Óscar is trying to do that but found out treesit-major-mode-setup doesn’t automatically setup indent-line-functions when treesit-indent-function is set. I’ve now fixed that. (Though I didn’t expect someone to use this variable.)
And to Óscar, I’m curious and interested to know what indentation function you came up with; if it’s useful maybe we can add it to Emacs?
>
>> OTOH, the info node for "Parser-based Indentation" says:
>>
>> To enable the parser-based indentation engine, either set
>> ‘treesit-simple-indent-rules’ and call ‘treesit-major-mode-setup’, or
>> equivalently, set the value of ‘indent-line-function’ to
>> ‘treesit-indent’.
>>
>> However, treesit-major-mode-setup does more than what's described after
>> "equivalently":
>>
>> (when treesit-simple-indent-rules
>> (setq-local treesit-simple-indent-rules
>> (treesit--indent-rules-optimize
>> treesit-simple-indent-rules))
>> (setq-local indent-line-function #'treesit-indent)
>> (setq-local indent-region-function #'treesit-indent-region))
>
> So this is just a matter of updating the documentation to mention
> indent-region-function?
>
> I've added Yuan, in case he has comments or suggestions.
I also updated the manual.
Yuan
This bug report was last modified 355 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.