GNU bug report logs -
#60602
29.0.60; treesit-simple-indent doesn't work for top-level nodes
Previous Next
Reported by: Piotr Trojanek <piotr.trojanek <at> gmail.com>
Date: Fri, 6 Jan 2023 13:42:02 UTC
Severity: normal
Found in version 29.0.60
Fixed in version 30.1
Done: Stefan Kangas <stefankangas <at> gmail.com>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#60602: 29.0.60; treesit-simple-indent doesn't work for top-level nodes
which was filed against the emacs package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 60602 <at> debbugs.gnu.org.
--
60602: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60602
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Theodor Thornhill <theo <at> thornhill.no> writes:
> Dmitry Gutov <dgutov <at> yandex.ru> writes:
>
>> On 20/01/2023 23:40, Theodor Thornhill wrote:
>>> You okay with this patch, Piotr and Dmitry?
>>
>> LGTM.
>
> Ok, installing on emacs-29,
>
> Thanks,
> Theo
This seems to have been fixed already. I'm therefore closing this bug
report.
If this conclusion is incorrect and this is still an issue, please reply
to this email (use "Reply to all" in your email client) and we can
reopen the bug report.
[Message part 3 (message/rfc822, inline)]
This problem can be reproduced with a correctly configured c-ts-mode,
which fails to indent the first line of a code like this, i.e. with
extra space at the very beginning of file and cursor positioned at
"main"):
===
int main (int argc, char *argv[])
{
return 0;
}
===
The intent of c-ts-mode--indent-styles is clearly to indent this line
to 0th column:
(defun c-ts-mode--indent-styles (mode)
...
`(((parent-is "translation_unit") parent-bol 0)
However, when indenting this line treesit-simple-indent is called with
node=translation_unit and parent=nil. It exits too early and doesn't
consider any indentation rules:
(defun treesit-simple-indent (node parent bol)
"..."
(if (null parent)
(progn (when treesit--indent-verbose
(message "PARENT is nil, not indenting"))
(cons nil nil))
Note that other tree-sitter modes have similar indentation rules, e.g.
ruby-ts-mode.el:
;; Slam all top level nodes to the left margin
((parent-is "program") parent 0)
and same for typescript-ts-mode.el:
((parent-is "program") parent-bol 0)
Perhaps the early exit from treesit-simple-indent could be removed, so
the indentation rules can decide how to handle a nil parent.
In GNU Emacs 29.0.60 (build 4, x86_64-pc-linux-gnu, GTK+ Version
3.24.24, cairo version 1.16.0) of 2023-01-06 built on mobile
Repository revision: 7420b6dcc379617ca9691049c16bfb2d158f9496
Repository branch: emacs-29
Windowing system distributor 'The X.Org Foundation', version 11.0.12011000
System Description: Debian GNU/Linux 11 (bullseye)
Configured using:
'configure --prefix=/opt/emacs-29 --with-tree-sitter'
Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS
TREE_SITTER X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB
This bug report was last modified 1 year and 338 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.