Subject: bug#60197: 30.0.50; beginning-of-defun broken after new treesit impl

From: Yuan Fu <[email-masked]>
Date: Wed, 21 Dec 2022 21:00:43 -0800

Theodor Thornhill <[email-masked]> writes:

> On 21 December 2022 07:50:04 CET, Yuan Fu <[email-masked]> wrote:
>>
>>Yuan Fu <[email-masked]> writes:
>>
>>> Theodor Thornhill <[email-masked]> writes:
>>>
>>>> Hi, Yuan!
>>>>
>>>> It seems 'prog-fill-reindent-defun' is broken after the latest changes
>>>> to treesit-beginning-of-defun.  The culprit is that we now use remap
>>>> instead of setting the beginning-of-defun-function.  What is the
>>>> reasoning behind that change?  Can't we just rely on the variable
>>>> beginning-of-defun-function?
>>>
>>> Not really, end-of-defun uses beginning/end-of-defun-function in a way
>>> that’s incompatible with nested defuns[1]. So if we want to support
>>> navigation nested defuns reliably we need to remap the commands instead.
>>> In the future (ie emacs 30), we can extend the current
>>> beginning/end-of-defun to support nested defuns, then we don’t need to
>>> remap the commands anymore.
>>
>>I see the problem now... Many other functions uses
>>beginning/end-of-defun. I didn’t thought about that initially :-(
>>
>>But I don’t want to make big changes to beg/end-of-deun, hmmm.
>>
>>Yuan
>
>
> I think you can set the functions and remap, right? Maybe you can
> force the beginning-of-defun-function variant to choose the smallest
> scope as a default? Or just follow the same tactic the user set?

Maybe, we can have beg-of-defun-function respect treesit-defun-tactic,
and end-of-defun-function simply jump to the end of the defun at point,
and remap the commands as we do now. I’ll experiment with that and see
if it works well.

Yuan