GNU bug report logs -
#59662
29.0.50; [PATCH] Add treesit--indent-defun
Previous Next
Reported by: Theodor Thornhill <theo <at> thornhill.no>
Date: Mon, 28 Nov 2022 19:33:01 UTC
Severity: wishlist
Tags: patch
Found in version 29.0.50
Done: Yuan Fu <casouri <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
Message #139 received at 59662 <at> debbugs.gnu.org (full text, mbox):
On 7 December 2022 22:40:31 CET, Yuan Fu <casouri <at> gmail.com> wrote:
>
>
>> On Dec 7, 2022, at 12:06 PM, Theodor Thornhill <theo <at> thornhill.no> wrote:
>>
>> Yuan Fu <casouri <at> gmail.com> writes:
>>
>>> Theodor Thornhill <theo <at> thornhill.no> writes:
>>>
>>>> Eli Zaretskii <eliz <at> gnu.org> writes:
>>>>
>>>>>> From: Theodor Thornhill <theo <at> thornhill.no>
>>>>>> Cc: "Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife
>>>>>> of text editors" <bug-gnu-emacs <at> gnu.org>, Eli Zaretskii <eliz <at> gnu.org>,
>>>>>> casouri <at> gmail.com, 59662 <at> debbugs.gnu.org
>>>>>> Date: Sun, 04 Dec 2022 13:33:35 +0100
>>>>>>
>>>>>> Theodor Thornhill <theo <at> thornhill.no> writes:
>>>>>>
>>>>>>> On 2 December 2022 22:09:55 CET, "Daniel Martín" <mardani29 <at> yahoo.es> wrote:
>>>>>>>> Theodor Thornhill <theo <at> thornhill.no> writes:
>>>>>>>>
>>>>>>>>> Right - thanks. However, this makes me wonder - should we really be
>>>>>>>>> setting mark here? I see that c-indent-defun does not, and it feels
>>>>>>>>> weird that indenting adds to the mark ring. What do you think? My
>>>>>>>>> first patch used
>>>>>>>>>
>>>>>>>>> (indent-region
>>>>>>>>> (treesit-node-start node)
>>>>>>>>> (treesit-node-end node))
>>>>>>>>>
>>>>>>>>> Which behaves similarly to c-indent-defun.
>>>>>>>>>
>>>>>>>>> See attached patch.
>>>>>>>>
>>>>>>>> I don't have a strong opinion, but if we can indent without setting the
>>>>>>>> mark, I think it'd be a cleaner command. Specially if c-indent-defun
>>>>>>>> doesn't set the mark either.
>>>>>>>
>>>>>>> Yeah, we don't need to set the mark. Thanks for the feedback :)
>>>>>>> Theo
>>>>>>
>>>>>> Eli, do you have any opinion on this matter? Should we implement this
>>>>>> function without using marks? That will make the function a smidge
>>>>>> bigger, but would not mess up the mark-ring. I think that's desirable,
>>>>>> at least.
>>>>>
>>>>> IMO, it is better not to set the mark, indeed.
>>>>
>>>> Agreed, see attached patch. What do you think, Yuan and Eli?
>>>>
>>>> Should we expose the internal helper I used, or maybe this function
>>>> could just as well live in treesit.c?
>>>>
>>>> Theo
>>>>
>>>
>>> Very nice, I applied this patch with some changes to the function. I
>>> think using treesit-beginning/end-of-defun is more robust.
>>>
>>> Yuan
>>
>> Thanks! Would you mind describing why?
>
>Yes, sorry. I’m planning to change treesit-beginning-of-defun and treesit-end-of-defun so they can behave differently according to user configuration, basically they can decide whether to skip nested defuns or not. If we use these functions rather than re-implementing their logic (to some extent) in c-ts-mode-indent-defun, any improvement to defun navigation would automatically benefit c-ts-mode-indent-defun.
>
>Yuan
Thanks for explaining your rationale.
By the way, there's an issue with the patch you applied:
void
foo()
{
...
}
If point is at the v in void, the current implementation will not reinvent. I didn't get time to debug yet, though. Possibly that will be fixed after your rework as well.
Theo
This bug report was last modified 2 years and 158 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.