Subject: bug#60602: closed (Re: bug#60602: 29.0.60; treesit-simple-indent doesn't work for top-level nodes)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 06 Sep 2023 00:10:01 +0000

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 [email-masked].

-- 
60602: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60602
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#60602: 29.0.60; treesit-simple-indent doesn't work for top-level nodes
From: Stefan Kangas <[email-masked]>
To: Theodor Thornhill <[email-masked]>
Cc: Yuan Fu <[email-masked]>, [email-masked], [email-masked], Dmitry Gutov <[email-masked]>
Date: Tue, 5 Sep 2023 17:09:04 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

Theodor Thornhill <[email-masked]> writes:

> Dmitry Gutov <[email-masked]> 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.

Subject: 29.0.60; treesit-simple-indent doesn't work for top-level nodes
From: Piotr Trojanek <[email-masked]>
To: [email-masked]
Date: Fri, 6 Jan 2023 14:40:49 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

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