* bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) [not found] ` <handler.65885.B.169449251427125.ack@debbugs.gnu.org> @ 2023-09-12 4:41 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 12:27 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-12 4:41 UTC (permalink / raw) To: 65885 [-- Attachment #1: Type: text/plain, Size: 1424 bytes --] 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. Regards. On Tue, Sep 12 2023, help-debbugs@gnu.org (GNU bug Tracking System) wrote: > Thank you for filing a new bug report with debbugs.gnu.org. > > This is an automatically generated reply to let you know your message > has been received. > > Your message is being forwarded to the package maintainers and other > interested parties for their attention; they will reply in due course. > > Your message has been sent to the package maintainer(s): > bug-gnu-emacs@gnu.org > > If you wish to submit further information on this problem, please > send it to 65885@debbugs.gnu.org. > > Please do not send mail to help-debbugs@gnu.org unless you wish > to report a problem with the Bug-tracking system. Regards, -- *Yang Yingchao* ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) 2023-09-12 4:41 ` bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-12 12:27 ` Eli Zaretskii 2023-09-13 0:03 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors [not found] ` <87wmwv9bhu.fsf@qq.com> 0 siblings, 2 replies; 6+ messages in thread From: Eli Zaretskii @ 2023-09-12 12:27 UTC (permalink / raw) To: yang.yingchao; +Cc: 65885 > 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" <bug-gnu-emacs@gnu.org> > > 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. ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) 2023-09-12 12:27 ` Eli Zaretskii @ 2023-09-13 0:03 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors [not found] ` <87wmwv9bhu.fsf@qq.com> 1 sibling, 0 replies; 6+ messages in thread From: Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-13 0:03 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 65885 [-- Attachment #1: Type: text/plain, Size: 1879 bytes --] >> 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" <bug-gnu-emacs@gnu.org> >> >> 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. I apologize, but I realized that I have already asked this question before. However, setting 'treesit-defun-tactic' to 'top-level' could cause other issues, as seen in the following snippets: ,---- | class Name { | public: | Name() | { | // cursor here | } | | void func() | { | static int a; | } | | }; `---- Suppose the cursor is in line 5, and "C-M-a" is pressed: - In 'c++-mode', the cursor will be moved to the start of the function 'Name()', which is the expected behavior. - In 'c++-ts-mode': - With 'treesit-defun-tactic' set to 'nested', it behaves the same as in 'c++-mode'. - With 'treesit-defun-tactic' set to 'top-level', the cursor is moved to the beginning of the class, i.e., line 1. Is it possible to make 'c++-ts-mode' behave the same as in 'c++-mode'? Regards. ^ permalink raw reply [flat|nested] 6+ messages in thread
[parent not found: <87wmwv9bhu.fsf@qq.com>]
* bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) [not found] ` <87wmwv9bhu.fsf@qq.com> @ 2023-09-13 0:41 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-13 12:13 ` Eli Zaretskii 0 siblings, 1 reply; 6+ messages in thread From: Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-13 0:41 UTC (permalink / raw) To: Eli Zaretskii, 65885 [-- Attachment #1: Type: text/plain, Size: 2233 bytes --] >>> 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" <bug-gnu-emacs@gnu.org> >>> >>> 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. > > > I apologize, but I realized that I have already asked this question before. > > However, setting 'treesit-defun-tactic' to 'top-level' could cause other > issues, as seen in the following snippets: > > > ,---- > | class Name { > | public: > | Name() > | { > | // cursor here > | } > | > | void func() > | { > | static int a; > | } > | > | }; > `---- > > Suppose the cursor is in line 5, and "C-M-a" is pressed: > > - In 'c++-mode', the cursor will be moved to the start of the function 'Name()', which is the expected behavior. > - In 'c++-ts-mode': > - With 'treesit-defun-tactic' set to 'nested', it behaves the same as in 'c++-mode'. > - With 'treesit-defun-tactic' set to 'top-level', the cursor is moved to the beginning of the class, i.e., line 1. > > Is it possible to make 'c++-ts-mode' behave the same as in 'c++-mode'? > > Regards. Maybe I'm wrong, but I would like to suggest reconsidering the solution to the 'begging-of-defun' issue related to the static *variable*. It feels strange to me to fix this issue by changing the 'treesit-defun-tactic', which is meant to apply to a *function* literally... ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) 2023-09-13 0:41 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-13 12:13 ` Eli Zaretskii 2023-09-14 0:17 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 6+ messages in thread From: Eli Zaretskii @ 2023-09-13 12:13 UTC (permalink / raw) To: yang.yingchao, Yuan Fu; +Cc: 65885 > From: Yang Yingchao <yang.yingchao@qq.com> > Date: Wed, 13 Sep 2023 08:41:27 +0800 > > >>> 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" <bug-gnu-emacs@gnu.org> > >>> > >>> 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. > > > > > > I apologize, but I realized that I have already asked this question before. > > > > However, setting 'treesit-defun-tactic' to 'top-level' could cause other > > issues, as seen in the following snippets: > > > > > > ,---- > > | class Name { > > | public: > > | Name() > > | { > > | // cursor here > > | } > > | > > | void func() > > | { > > | static int a; > > | } > > | > > | }; > > `---- > > > > Suppose the cursor is in line 5, and "C-M-a" is pressed: > > > > - In 'c++-mode', the cursor will be moved to the start of the function 'Name()', which is the expected behavior. > > - In 'c++-ts-mode': > > - With 'treesit-defun-tactic' set to 'nested', it behaves the same as in 'c++-mode'. > > - With 'treesit-defun-tactic' set to 'top-level', the cursor is moved to the beginning of the class, i.e., line 1. > > > > Is it possible to make 'c++-ts-mode' behave the same as in 'c++-mode'? > > > > Regards. > > Maybe I'm wrong, but I would like to suggest reconsidering the solution to the 'begging-of-defun' issue related to the static *variable*. It feels strange to me to fix this issue by changing the 'treesit-defun-tactic', which is meant to apply to a *function* literally... Yuan, any ideas or suggestions? ^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) 2023-09-13 12:13 ` Eli Zaretskii @ 2023-09-14 0:17 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 0 replies; 6+ messages in thread From: Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-14 0:17 UTC (permalink / raw) To: Eli Zaretskii; +Cc: Yuan Fu, 65885 [-- Attachment #1: Type: text/plain, Size: 3510 bytes --] >> From: Yang Yingchao <yang.yingchao@qq.com> >> Date: Wed, 13 Sep 2023 08:41:27 +0800 >> >> >>> 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" <bug-gnu-emacs@gnu.org> >> >>> >> >>> 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. >> > >> > >> > I apologize, but I realized that I have already asked this question before. >> > >> > However, setting 'treesit-defun-tactic' to 'top-level' could cause other >> > issues, as seen in the following snippets: >> > >> > >> > ,---- >> > | class Name { >> > | public: >> > | Name() >> > | { >> > | // cursor here >> > | } >> > | >> > | void func() >> > | { >> > | static int a; >> > | } >> > | >> > | }; >> > `---- >> > >> > Suppose the cursor is in line 5, and "C-M-a" is pressed: >> > >> > - In 'c++-mode', the cursor will be moved to the start of the function 'Name()', which is the expected behavior. >> > - In 'c++-ts-mode': >> > - With 'treesit-defun-tactic' set to 'nested', it behaves the same as in 'c++-mode'. >> > - With 'treesit-defun-tactic' set to 'top-level', the cursor is moved to the beginning of >> > the class, i.e., line 1. >> > >> > Is it possible to make 'c++-ts-mode' behave the same as in 'c++-mode'? >> > >> > Regards. >> >> Maybe I'm wrong, but I would like to suggest reconsidering the solution to the >> 'begging-of-defun' issue related to the static *variable*. It feels strange to me to fix this >> issue by changing the 'treesit-defun-tactic', which is meant to apply to a *function* >> literally... > > Yuan, any ideas or suggestions? Just FYI, I made some modifications to 'treesit--navigate-thing' in my own branch to fix this specific issue: ,---- | 1 file changed, 8 insertions(+) | lisp/treesit.el | 8 ++++++++ | | modified lisp/treesit.el | @@ -2092,6 +2092,14 @@ treesit--navigate-thing | (pcase-let | ((`(,prev ,next ,parent) | (treesit--things-around pos regexp pred))) | + | + ;; YYC: Special handling for static variable inside defun... | + (when (and (equal (treesit-node-type prev) | + "storage_class_specifier") | + (equal (treesit-node-type (treesit-node-parent prev)) | + "declaration")) | + (setq prev nil)) | + | ;; When PARENT is nil, nested and top-level are the same, if | ;; there is a PARENT, make PARENT to be the top-level parent | ;; and pretend there is no nested PREV and NEXT. | `---- ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-09-14 0:17 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <871qf4doit.fsf@qq.com> [not found] ` <handler.65885.B.169449251427125.ack@debbugs.gnu.org> 2023-09-12 4:41 ` bug#65885: Acknowledgement (29.1.50; wrong behaviour of treesit-beginning-of-defun in c++-ts-mode) Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 12:27 ` Eli Zaretskii 2023-09-13 0:03 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors [not found] ` <87wmwv9bhu.fsf@qq.com> 2023-09-13 0:41 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-13 12:13 ` Eli Zaretskii 2023-09-14 0:17 ` Yang Yingchao via Bug reports for GNU Emacs, the Swiss army knife of text editors
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).