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

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

bug#64442: 29.0.92; treesit-beginning-of-defun fails in DEFUN functions


From: Yuan Fu
Subject: bug#64442: 29.0.92; treesit-beginning-of-defun fails in DEFUN functions in C
Date: Tue, 4 Jul 2023 01:41:22 -0700


> On Jul 3, 2023, at 10:13 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> 
> To reproduce:
> 
>  emacs -Q
>  C-x C-f src/dispnew.c RET
>  M-x c-ts-mode RET
>  C-u 220 M-g g
>  C-M-a
> 
> Observe that instead of going to the beginning of
> dump-redisplay-history, the function to which line 220 of dispnew.c
> belongs, point goes to the beginning of the previous function, which
> happens to be add_frame_display_history.
> 
> Can we please fix treesit-beginning-of-defun such that it recognizes C
> functions defined via DEFUN?

I’ve tried it when I was fixing fontification for DEFUN, but ultimately gave 
up. The tree-sitter defun movement functions searches for defun nodes 
bottom-up, and goes to the beginning or end of that node. 

The problem with DEFUN’s is that a DEFUN is really made of two nodes in the 
parse tree. One for the DEFUN part, one for the body, and there isn’t a parent 
node that encloses the two. 

The defun movement functions are not designed to handle a construct made of two 
adjacent nodes. They can find a node, go to the beginning/end of it; they can’t 
find a node, and go to the end of the next node.

It sounds easy to add some hack to handle it, but really isn’t. Defun movement 
need to support forward/backward to beg/end, that’s four movement types; on top 
of that you have nested defun’s.

Yuan




reply via email to

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