Subject: Re: bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode)

From: Eli Zaretskii <[email-masked]>
Date: Tue, 12 Sep 2023 15:27:35 +0300

> Date: Tue, 12 Sep 2023 12:41:32 +0800
> From:  Yang Yingchao via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <[email-masked]>
> 
> It seams that there is an issue with the behavior of `treesit-beginning-of-defun` function in
> `c++-ts-mode` when there are static variables present in the source code. For instance, in the
> provided code snippet, if the cursor is initially placed on the line containing `int b`, and the
> "C-M-a" is pressed, the cursor is positioned on line 4 instead of line 1 where the beginning of
> the function is located.
> 
> ,----
> | void func		// c-ts-mode: treesit-beginning-of-defun stops in this line,   RIGHT
> | {
> |   char * msg;
> |   static int a; // c++-ts-mode: treesit-beginning-of-defun stops in this line, WRONG
> |   int b;        // PUT CUSOR HERE
> | }
> `----
> 
> it works in c-ts-mode works normally.

If you want c++-ts-mode to work like c-ts-mode, set
treesit-defun-tactic to 'top-level'.  By default, we try to support
nested defuns in C++, but not in C.