GNU bug report logs - #77727
tsx-ts-mode: fill-paragraph doesn't work for doc-comments

Previous Next

Package: emacs;

Reported by: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>

Date: Fri, 11 Apr 2025 08:12:02 UTC

Severity: normal

To reply to this bug, email your comments to 77727 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#77727; Package emacs. (Fri, 11 Apr 2025 08:12:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Konstantin Kharlamov <Hi-Angel <at> yandex.ru>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 11 Apr 2025 08:12:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: tsx-ts-mode: fill-paragraph doesn't work for doc-comments
Date: Fri, 11 Apr 2025 11:10:34 +0300
Steps to reproduce:

1. Open `test.tsx` with the following content:

    // File description
    /**
     * Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis.
     */
2. Try to "fill" the Lorem ipsum text.

Result: nothing changes, the text doesn't get "filled".

---------

I dug into it, the bug resides in the following condition in
`c-ts-common--fill-paragraph`:

                …
                ;; In rust, NODE will be the body of a comment, and the
                ;; parent will be the whole comment.
                (if-let* ((start (treesit-node-start
                                  (treesit-node-parent node))))
                    (save-excursion
                      (goto-char start)
                      (looking-at "//"))))
                …

The problem is that "(treesit-node-start (treesit-node-parent node))" returns 1.
That happens disregarding the amount of code between the "// File description"
line and where "/* Lorem ipsum…" is. In the actual code there's 51 lines in
between.

Why treesit-node-start does that I don't know, so I decided to report it.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#77727; Package emacs. (Fri, 11 Apr 2025 08:35:02 GMT) Full text and rfc822 format available.

Message #8 received at 77727 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: 77727 <at> debbugs.gnu.org, casouri <at> gmail.com
Subject: bug#77727: tsx-ts-mode: fill-paragraph doesn't work for doc-comments
Date: Fri, 11 Apr 2025 11:34:38 +0300
CC: Yuan Fu as the author of the code in question.

What happens in the code makes sense: since the comment resides at top-
level, the parent of any top-level statement (returned by (treesit-
node-parent node)) is, well, beginning of a buffer.

So the question is, why the check works that way.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#77727; Package emacs. (Fri, 11 Apr 2025 11:52:02 GMT) Full text and rfc822 format available.

Message #11 received at 77727 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: 77727 <at> debbugs.gnu.org, casouri <at> gmail.com
Subject: [PATCH] Limit rust-ts-specific comment-start check to rust-ts
 (bug#77727)
Date: Fri, 11 Apr 2025 14:51:44 +0300
[Message part 1 (text/plain, inline)]
On Fri, 2025-04-11 at 11:34 +0300, Konstantin Kharlamov wrote:
> CC: Yuan Fu as the author of the code in question.
> 
> What happens in the code makes sense: since the comment resides at
> top-
> level, the parent of any top-level statement (returned by (treesit-
> node-parent node)) is, well, beginning of a buffer.
> 
> So the question is, why the check works that way.

Please see the attached patch, it'd seem this is exactly the fix that's
expected here. Basically, the problematic check is specific to Rust
treesitter mode, so shouldn't be executed in other languages. The patch
factors out the entire check to a separate function and adds additional
condition of (eq major-mode 'rust-ts-mode).

Tested in tsx-ts-mode, it fixes the problem.
[1.patch (text/x-patch, attachment)]

This bug report was last modified 1 day ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.