GNU bug report logs -
#62825
29.0.90; c-ts-mode doesn't recognize DEFUN functions
Previous Next
To reply to this bug, email your comments to 62825 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Fri, 14 Apr 2023 06:45:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Eli Zaretskii <eliz <at> gnu.org>
:
New bug report received and forwarded. Copy sent to
bug-gnu-emacs <at> gnu.org
.
(Fri, 14 Apr 2023 06:45:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Evaluating '(treesit-defun-at-point)' inside a function defined via
the DEFUN macro yields nil, when the buffer is under c-ts-mode. This
gets in the way of significant functionalities, like
c-ts-mode-indent-defun and generating ChangeLog-style log entries
using "C-x 4 a" and the likes.
To reproduce, visit any of the Emacs C source files, like treesit.c,
with c-ts-mode, move point to a function defined via DEFUN, and type
"C-x 4 a". The resulting ChangeLog entry will have the file name, but
not the expected function name in parentheses.
Please fix this ASAP, this is a bad regression for those, like myself,
who want to use c-ts-mode.
In GNU Emacs 29.0.90 (build 2, i686-pc-mingw32) of 2023-04-10 built on
HOME-C4E4A596F7
Windowing system distributor 'Microsoft Corp.', version 5.1.2600
System Description: Microsoft Windows XP Service Pack 3 (v5.1.0.2600)
Configured using:
'configure --prefix=/d/usr --with-wide-int --with-native-compilation
'CFLAGS=-O2 -gdwarf-4 -g3''
Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB
Important settings:
value of $LANG: ENU
locale-coding-system: cp1255
Major mode: Lisp Interaction
Minor modes in effect:
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
show-paren-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
line-number-mode: t
indent-tabs-mode: t
transient-mark-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
Load-path shadows:
None found.
Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068
epg-config gnus-util text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs
comp comp-cstr warnings icons subr-x rx cl-seq cl-macs gv cl-extra
help-mode bytecomp byte-compile cl-lib sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel dos-w32 ls-lisp disp-table term/w32-win w32-win
w32-vars term/common-win tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads w32notify w32 lcms2 multi-tty make-network-process
native-compile emacs)
Memory information:
((conses 16 83196 14093)
(symbols 48 8277 0)
(strings 16 22852 2978)
(string-bytes 1 598231)
(vectors 16 16223)
(vector-slots 8 320282 14191)
(floats 8 30 46)
(intervals 40 293 0)
(buffers 888 12))
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Fri, 14 Apr 2023 07:00:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 62825 <at> debbugs.gnu.org (full text, mbox):
> Date: Fri, 14 Apr 2023 09:44:22 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
>
> Evaluating '(treesit-defun-at-point)' inside a function defined via
> the DEFUN macro yields nil, when the buffer is under c-ts-mode. This
> gets in the way of significant functionalities, like
> c-ts-mode-indent-defun and generating ChangeLog-style log entries
> using "C-x 4 a" and the likes.
>
> To reproduce, visit any of the Emacs C source files, like treesit.c,
> with c-ts-mode, move point to a function defined via DEFUN, and type
> "C-x 4 a". The resulting ChangeLog entry will have the file name, but
> not the expected function name in parentheses.
>
> Please fix this ASAP, this is a bad regression for those, like myself,
> who want to use c-ts-mode.
Using treesit-explore-mode I see that c-ts-mode regards DEFUN
functions as a sequence of 2 expression_statement nodes. Here's the
tree corresponding to the DEFUN macro call:
(expression_statement
(call_expression
function:
(call_expression function: (identifier) <<<<<<<<<<<<<<<<<<<
arguments:
(argument_list (
(string_literal " ")
, (identifier) , (identifier) , (number_literal) , (number_literal) ,
(number_literal)
, (identifier)
(ERROR :)
(comment) )))
arguments:
(argument_list ( (identifier)
(ERROR (identifier))
, (identifier)
(ERROR (identifier))
)))
;)
The identifier node on the line indicated with "<<<<<" is "DEFUN", so
maybe we can recognize this. The body of the DEFUN is another
compound_statement node, following the DEFUN's node.
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Fri, 14 Apr 2023 20:20:02 GMT)
Full text and
rfc822 format available.
Message #11 received at 62825 <at> debbugs.gnu.org (full text, mbox):
> On Apr 13, 2023, at 11:59 PM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>
>> Date: Fri, 14 Apr 2023 09:44:22 +0300
>> From: Eli Zaretskii <eliz <at> gnu.org>
>>
>> Evaluating '(treesit-defun-at-point)' inside a function defined via
>> the DEFUN macro yields nil, when the buffer is under c-ts-mode. This
>> gets in the way of significant functionalities, like
>> c-ts-mode-indent-defun and generating ChangeLog-style log entries
>> using "C-x 4 a" and the likes.
>>
>> To reproduce, visit any of the Emacs C source files, like treesit.c,
>> with c-ts-mode, move point to a function defined via DEFUN, and type
>> "C-x 4 a". The resulting ChangeLog entry will have the file name, but
>> not the expected function name in parentheses.
>>
>> Please fix this ASAP, this is a bad regression for those, like myself,
>> who want to use c-ts-mode.
>
> Using treesit-explore-mode I see that c-ts-mode regards DEFUN
> functions as a sequence of 2 expression_statement nodes. Here's the
> tree corresponding to the DEFUN macro call:
>
> (expression_statement
> (call_expression
> function:
> (call_expression function: (identifier) <<<<<<<<<<<<<<<<<<<
> arguments:
> (argument_list (
> (string_literal " ")
> , (identifier) , (identifier) , (number_literal) , (number_literal) ,
> (number_literal)
> , (identifier)
> (ERROR :)
> (comment) )))
> arguments:
> (argument_list ( (identifier)
> (ERROR (identifier))
> , (identifier)
> (ERROR (identifier))
> )))
> ;)
>
> The identifier node on the line indicated with "<<<<<" is "DEFUN", so
> maybe we can recognize this. The body of the DEFUN is another
> compound_statement node, following the DEFUN's node.
Ok, I fixed indent-defund and add-log. Because a DEFUN is made of two nodes in the parse tree rather than one, it’s a bit hard to incorporate it into the normal treesit-defun-at-point, etc, functions. And we probably have to fix DEFUN case-by-case.
Yuan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Sat, 15 Apr 2023 07:50:01 GMT)
Full text and
rfc822 format available.
Message #14 received at 62825 <at> debbugs.gnu.org (full text, mbox):
> From: Yuan Fu <casouri <at> gmail.com>
> Date: Fri, 14 Apr 2023 13:19:41 -0700
> Cc: Theodor Thornhill <theo <at> thornhill.no>,
> 62825 <at> debbugs.gnu.org
>
> Ok, I fixed indent-defund and add-log. Because a DEFUN is made of two nodes in the parse tree rather than one, it’s a bit hard to incorporate it into the normal treesit-defun-at-point, etc, functions. And we probably have to fix DEFUN case-by-case.
Thanks. But I wonder why do we need the c-ts-mode-emacs-devel knob.
Why not recognize DEFUN by default everywhere? CC Mode does that,
AFAIK, so why shouldn't c-ts-mode do the same?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Sun, 16 Apr 2023 05:38:02 GMT)
Full text and
rfc822 format available.
Message #17 received at 62825 <at> debbugs.gnu.org (full text, mbox):
Eli Zaretskii <eliz <at> gnu.org> writes:
>> From: Yuan Fu <casouri <at> gmail.com>
>> Date: Fri, 14 Apr 2023 13:19:41 -0700
>> Cc: Theodor Thornhill <theo <at> thornhill.no>,
>> 62825 <at> debbugs.gnu.org
>>
>> Ok, I fixed indent-defund and add-log. Because a DEFUN is made of
>> two nodes in the parse tree rather than one, it’s a bit hard to
>> incorporate it into the normal treesit-defun-at-point, etc,
>> functions. And we probably have to fix DEFUN case-by-case.
>
> Thanks. But I wonder why do we need the c-ts-mode-emacs-devel knob.
> Why not recognize DEFUN by default everywhere? CC Mode does that,
> AFAIK, so why shouldn't c-ts-mode do the same?
I just thought the fix is a bit hacky, and does add some overhead, so
people who don’t need it might not be happy to know that they can’t turn
it off.
Yuan
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Sun, 16 Apr 2023 08:15:01 GMT)
Full text and
rfc822 format available.
Message #20 received at 62825 <at> debbugs.gnu.org (full text, mbox):
> From: Yuan Fu <casouri <at> gmail.com>
> Date: Sat, 15 Apr 2023 22:37:02 -0700
> Cc: 62825 <at> debbugs.gnu.org,
> theo <at> thornhill.no
>
>
> Eli Zaretskii <eliz <at> gnu.org> writes:
>
> > Thanks. But I wonder why do we need the c-ts-mode-emacs-devel knob.
> > Why not recognize DEFUN by default everywhere? CC Mode does that,
> > AFAIK, so why shouldn't c-ts-mode do the same?
>
> I just thought the fix is a bit hacky, and does add some overhead, so
> people who don’t need it might not be happy to know that they can’t turn
> it off.
OK, but I made it into a defcustom and turned this on by default. I
also renamed a few symbols, please take a look.
Btw, should the code you added to c-ts-mode--defun-name recognize
DEFUN nodes only when this variable is non-nil?
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#62825
; Package
emacs
.
(Wed, 19 Apr 2023 19:12:01 GMT)
Full text and
rfc822 format available.
Message #23 received at 62825 <at> debbugs.gnu.org (full text, mbox):
> On Apr 16, 2023, at 1:14 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>
>> From: Yuan Fu <casouri <at> gmail.com>
>> Date: Sat, 15 Apr 2023 22:37:02 -0700
>> Cc: 62825 <at> debbugs.gnu.org,
>> theo <at> thornhill.no
>>
>>
>> Eli Zaretskii <eliz <at> gnu.org> writes:
>>
>>> Thanks. But I wonder why do we need the c-ts-mode-emacs-devel knob.
>>> Why not recognize DEFUN by default everywhere? CC Mode does that,
>>> AFAIK, so why shouldn't c-ts-mode do the same?
>>
>> I just thought the fix is a bit hacky, and does add some overhead, so
>> people who don’t need it might not be happy to know that they can’t turn
>> it off.
>
> OK, but I made it into a defcustom and turned this on by default. I
> also renamed a few symbols, please take a look.
Thanks.
>
> Btw, should the code you added to c-ts-mode--defun-name recognize
> DEFUN nodes only when this variable is non-nil?
I don’t think it’s necessary, we only need to inhibit creating DEFUN nodes when the feature is turned-off, ie, we only need to control the entry points.
Yuan
This bug report was last modified 2 years and 61 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.