GNU bug report logs - #70074
29.1; js-ts-mode doesn't define comment-line-break-function

Previous Next

Package: emacs;

Reported by: Evan Davis <davis.evan.m <at> gmail.com>

Date: Fri, 29 Mar 2024 16:03:02 UTC

Severity: normal

Found in version 29.1

Done: Yuan Fu <casouri <at> gmail.com>

To reply to this bug, email your comments to 70074 AT debbugs.gnu.org.
There is no need to reopen the bug first.

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#70074; Package emacs. (Fri, 29 Mar 2024 16:03:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Evan Davis <davis.evan.m <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Fri, 29 Mar 2024 16:03:02 GMT) Full text and rfc822 format available.

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

From: Evan Davis <davis.evan.m <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.1; js-ts-mode doesn't define comment-line-break-function
Date: Fri, 29 Mar 2024 11:03:10 -0400
[Message part 1 (text/plain, inline)]
js-ts-mode and js-mode behave differently when calling
default-indent-new-line (M-j) within a multiline comment.

Observed behavior:
  - in js-mode, M-j calls c-indent-new-comment-line, which correctly
inserts a newline, indented to the correct column and prefixed with '*'
  - in js-ts-mode, M-j calls comment-indent-new-line, which inserts an
indented newline without the prefix.

Expected behavior:
Block comments should be handled the same in both modes.

Steps to reproduce:
1. emacs -Q
2. open a scratch buffer in js-ts-mode and enter text (without quotes) "/*"
3. press M-j
4. observe newline is created without star prefix

Follow the same steps in js-mode to observe the desired behavior.

In GNU Emacs 29.1 (build 1, aarch64-apple-darwin21.6.0, NS
 appkit-2113.60 Version 12.6.6 (Build 21G646)) of 2023-08-16 built on
 armbob.lan
Windowing system distributor 'Apple', version 10.3.2299
System Description:  macOS 13.6.3

Configured using:
 'configure --with-ns '--enable-locallisppath=/Library/Application
 Support/Emacs/${version}/site-lisp:/Library/Application
 Support/Emacs/site-lisp' --with-modules 'CFLAGS=-DFD_SETSIZE=10000
 -DDARWIN_UNLIMITED_SELECT' --with-x-toolkit=no'

Configured features:
ACL GLIB GMP GNUTLS JPEG JSON LIBXML2 MODULES NOTIFY KQUEUE NS PDUMPER
PNG RSVG SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER ZLIB

Important settings:
  value of $LC_ALL: en_US.UTF-8
  value of $LANG: en_US
  locale-coding-system: utf-8-unix

Major mode: JavaScript

Minor modes in effect:
  tooltip-mode: t
  global-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 mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils pp cl-extra cl-print
thingatpt help-fns radix-tree help-mode js c-ts-common treesit cl-seq
json map byte-opt gv bytecomp byte-compile imenu cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
time-date subr-x cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode
mwheel term/ns-win ns-win ucs-normalize mule-util 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 kqueue
cocoa ns multi-tty make-network-process emacs)

Memory information:
((conses 16 81595 8317)
 (symbols 48 8432 0)
 (strings 32 26906 1149)
 (string-bytes 1 926726)
 (vectors 16 16240)
 (vector-slots 8 222853 10872)
 (floats 8 35 38)
 (intervals 56 269 0)
 (buffers 984 11))
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#70074; Package emacs. (Thu, 04 Apr 2024 12:33:02 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Evan Davis <davis.evan.m <at> gmail.com>, Dmitry Gutov <dmitry <at> gutov.dev>,
 Yuan Fu <casouri <at> gmail.com>
Cc: 70074 <at> debbugs.gnu.org
Subject: Re: bug#70074: 29.1;
 js-ts-mode doesn't define comment-line-break-function
Date: Thu, 04 Apr 2024 15:32:47 +0300
> From: Evan Davis <davis.evan.m <at> gmail.com>
> Date: Fri, 29 Mar 2024 11:03:10 -0400
> 
> js-ts-mode and js-mode behave differently when calling default-indent-new-line (M-j) within a multiline
> comment.
> 
> Observed behavior: 
>   - in js-mode, M-j calls c-indent-new-comment-line, which correctly inserts a newline, indented to the correct
> column and prefixed with '*'
>   - in js-ts-mode, M-j calls comment-indent-new-line, which inserts an indented newline without the prefix.
> 
> Expected behavior:
> Block comments should be handled the same in both modes.
> 
> Steps to reproduce:
> 1. emacs -Q
> 2. open a scratch buffer in js-ts-mode and enter text (without quotes) "/*"
> 3. press M-j
> 4. observe newline is created without star prefix
> 
> Follow the same steps in js-mode to observe the desired behavior.

Dmitry, Yuan: any comments or suggestions?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#70074; Package emacs. (Fri, 05 Apr 2024 00:29:02 GMT) Full text and rfc822 format available.

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

From: Dmitry Gutov <dmitry <at> gutov.dev>
To: Eli Zaretskii <eliz <at> gnu.org>, Evan Davis <davis.evan.m <at> gmail.com>,
 Yuan Fu <casouri <at> gmail.com>
Cc: 70074 <at> debbugs.gnu.org
Subject: Re: bug#70074: 29.1; js-ts-mode doesn't define
 comment-line-break-function
Date: Fri, 5 Apr 2024 03:28:10 +0300
On 04/04/2024 15:32, Eli Zaretskii wrote:
>> From: Evan Davis<davis.evan.m <at> gmail.com>
>> Date: Fri, 29 Mar 2024 11:03:10 -0400
>>
>> js-ts-mode and js-mode behave differently when calling default-indent-new-line (M-j) within a multiline
>> comment.
>>
>> Observed behavior:
>>    - in js-mode, M-j calls c-indent-new-comment-line, which correctly inserts a newline, indented to the correct
>> column and prefixed with '*'
>>    - in js-ts-mode, M-j calls comment-indent-new-line, which inserts an indented newline without the prefix.
>>
>> Expected behavior:
>> Block comments should be handled the same in both modes.
>>
>> Steps to reproduce:
>> 1. emacs -Q
>> 2. open a scratch buffer in js-ts-mode and enter text (without quotes) "/*"
>> 3. press M-j
>> 4. observe newline is created without star prefix
>>
>> Follow the same steps in js-mode to observe the desired behavior.
> Dmitry, Yuan: any comments or suggestions?

I suppose following in js-mode's footsteps and reusing this part of CC 
Mode is the obvious solution.

I haven't looked at the implementation closely enough to suggest 
something else, but it'd of course be nice to be able to provide a 
self-contained, shorter re-implementation instead.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#70074; Package emacs. (Mon, 08 Apr 2024 07:11:04 GMT) Full text and rfc822 format available.

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

From: Yuan Fu <casouri <at> gmail.com>
To: Dmitry Gutov <dmitry <at> gutov.dev>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 70074 <at> debbugs.gnu.org,
 Evan Davis <davis.evan.m <at> gmail.com>
Subject: Re: bug#70074: 29.1; js-ts-mode doesn't define
 comment-line-break-function
Date: Mon, 8 Apr 2024 00:10:32 -0700

> On Apr 4, 2024, at 5:28 PM, Dmitry Gutov <dmitry <at> gutov.dev> wrote:
> 
> On 04/04/2024 15:32, Eli Zaretskii wrote:
>>> From: Evan Davis<davis.evan.m <at> gmail.com>
>>> Date: Fri, 29 Mar 2024 11:03:10 -0400
>>> 
>>> js-ts-mode and js-mode behave differently when calling default-indent-new-line (M-j) within a multiline
>>> comment.
>>> 
>>> Observed behavior:
>>>   - in js-mode, M-j calls c-indent-new-comment-line, which correctly inserts a newline, indented to the correct
>>> column and prefixed with '*'
>>>   - in js-ts-mode, M-j calls comment-indent-new-line, which inserts an indented newline without the prefix.
>>> 
>>> Expected behavior:
>>> Block comments should be handled the same in both modes.
>>> 
>>> Steps to reproduce:
>>> 1. emacs -Q
>>> 2. open a scratch buffer in js-ts-mode and enter text (without quotes) "/*"
>>> 3. press M-j
>>> 4. observe newline is created without star prefix
>>> 
>>> Follow the same steps in js-mode to observe the desired behavior.
>> Dmitry, Yuan: any comments or suggestions?
> 
> I suppose following in js-mode's footsteps and reusing this part of CC Mode is the obvious solution.
> 
> I haven't looked at the implementation closely enough to suggest something else, but it'd of course be nice to be able to provide a self-contained, shorter re-implementation instead.

Sounds good. I wasn’t aware of this command before. Let me add it to c-ts-common.el.

Yuan



Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#70074; Package emacs. (Sat, 20 Apr 2024 07:45:01 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: Yuan Fu <casouri <at> gmail.com>
Cc: dmitry <at> gutov.dev, 70074 <at> debbugs.gnu.org, davis.evan.m <at> gmail.com
Subject: Re: bug#70074: 29.1; js-ts-mode doesn't define
 comment-line-break-function
Date: Sat, 20 Apr 2024 10:44:03 +0300
Ping!  Yuan, can we make some progress here?

> From: Yuan Fu <casouri <at> gmail.com>
> Date: Mon, 8 Apr 2024 00:10:32 -0700
> Cc: Eli Zaretskii <eliz <at> gnu.org>,
>  Evan Davis <davis.evan.m <at> gmail.com>,
>  70074 <at> debbugs.gnu.org
> 
> 
> 
> > On Apr 4, 2024, at 5:28 PM, Dmitry Gutov <dmitry <at> gutov.dev> wrote:
> > 
> > On 04/04/2024 15:32, Eli Zaretskii wrote:
> >>> From: Evan Davis<davis.evan.m <at> gmail.com>
> >>> Date: Fri, 29 Mar 2024 11:03:10 -0400
> >>> 
> >>> js-ts-mode and js-mode behave differently when calling default-indent-new-line (M-j) within a multiline
> >>> comment.
> >>> 
> >>> Observed behavior:
> >>>   - in js-mode, M-j calls c-indent-new-comment-line, which correctly inserts a newline, indented to the correct
> >>> column and prefixed with '*'
> >>>   - in js-ts-mode, M-j calls comment-indent-new-line, which inserts an indented newline without the prefix.
> >>> 
> >>> Expected behavior:
> >>> Block comments should be handled the same in both modes.
> >>> 
> >>> Steps to reproduce:
> >>> 1. emacs -Q
> >>> 2. open a scratch buffer in js-ts-mode and enter text (without quotes) "/*"
> >>> 3. press M-j
> >>> 4. observe newline is created without star prefix
> >>> 
> >>> Follow the same steps in js-mode to observe the desired behavior.
> >> Dmitry, Yuan: any comments or suggestions?
> > 
> > I suppose following in js-mode's footsteps and reusing this part of CC Mode is the obvious solution.
> > 
> > I haven't looked at the implementation closely enough to suggest something else, but it'd of course be nice to be able to provide a self-contained, shorter re-implementation instead.
> 
> Sounds good. I wasn’t aware of this command before. Let me add it to c-ts-common.el.
> 
> Yuan




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#70074; Package emacs. (Mon, 22 Apr 2024 04:37:01 GMT) Full text and rfc822 format available.

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

From: Yuan Fu <casouri <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: dmitry <at> gutov.dev, 70074 <at> debbugs.gnu.org, davis.evan.m <at> gmail.com
Subject: Re: bug#70074: 29.1; js-ts-mode doesn't define
 comment-line-break-function
Date: Sun, 21 Apr 2024 21:35:24 -0700

> On Apr 20, 2024, at 12:44 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
> 
> Ping!  Yuan, can we make some progress here?
> 
>> From: Yuan Fu <casouri <at> gmail.com>
>> Date: Mon, 8 Apr 2024 00:10:32 -0700
>> Cc: Eli Zaretskii <eliz <at> gnu.org>,
>> Evan Davis <davis.evan.m <at> gmail.com>,
>> 70074 <at> debbugs.gnu.org
>> 
>> 
>> 
>>> On Apr 4, 2024, at 5:28 PM, Dmitry Gutov <dmitry <at> gutov.dev> wrote:
>>> 
>>> On 04/04/2024 15:32, Eli Zaretskii wrote:
>>>>> From:Evan Davis<davis.evan.m <at> gmail.com>
>>>>> Date: Fri, 29 Mar 2024 11:03:10 -0400
>>>>> 
>>>>> js-ts-mode and js-mode behave differently when calling default-indent-new-line (M-j) within a multiline
>>>>> comment.
>>>>> 
>>>>> Observed behavior:
>>>>>  - in js-mode, M-j calls c-indent-new-comment-line, which correctly inserts a newline, indented to the correct
>>>>> column and prefixed with '*'
>>>>>  - in js-ts-mode, M-j calls comment-indent-new-line, which inserts an indented newline without the prefix.
>>>>> 
>>>>> Expected behavior:
>>>>> Block comments should be handled the same in both modes.
>>>>> 
>>>>> Steps to reproduce:
>>>>> 1. emacs -Q
>>>>> 2. open a scratch buffer in js-ts-mode and enter text (without quotes) "/*"
>>>>> 3. press M-j
>>>>> 4. observe newline is created without star prefix
>>>>> 
>>>>> Follow the same steps in js-mode to observe the desired behavior.
>>>> Dmitry, Yuan: any comments or suggestions?
>>> 
>>> I suppose following in js-mode's footsteps and reusing this part of CC Mode is the obvious solution.
>>> 
>>> I haven't looked at the implementation closely enough to suggest something else, but it'd of course be nice to be able to provide a self-contained, shorter re-implementation instead.
>> 
>> Sounds good. I wasn’t aware of this command before. Let me add it to c-ts-common.el.
>> 
>> Yuan

I looked at the implementation of c-indent-new-comment-line, it’s 178 lines of complicated control flow, handling all sorts of edge cases that I don’t understand. Sadly it’s pretty keeping coupled with the whole cc framework, so it’ll be pretty hard to take it out and reuse for c-ts-common.el.

So I added a new function c-ts-common-comment-indent-new-line. It’s probably nothing compare to c-indent-new-comment-line’s capabilities, but it can at least handle the usual cases that I can think of: indenting after //, after /*, after * inside a block comment, and after | inside a block comment.

For more advanced use-cases, we can wait until someone asks for them.

Evan, if you pull the latest master, M-j should now just work for js-ts-mode.

Yuan



Reply sent to Yuan Fu <casouri <at> gmail.com>:
You have taken responsibility. (Tue, 23 Apr 2024 04:28:03 GMT) Full text and rfc822 format available.

Notification sent to Evan Davis <davis.evan.m <at> gmail.com>:
bug acknowledged by developer. (Tue, 23 Apr 2024 04:28:04 GMT) Full text and rfc822 format available.

Message #25 received at 70074-done <at> debbugs.gnu.org (full text, mbox):

From: Yuan Fu <casouri <at> gmail.com>
To: Evan Davis <davis.evan.m <at> gmail.com>
Cc: 70074-done <at> debbugs.gnu.org
Subject: Re: bug#70074: 29.1; js-ts-mode doesn't define
 comment-line-break-function
Date: Mon, 22 Apr 2024 21:27:20 -0700

> On Apr 22, 2024, at 12:06 PM, Evan Davis <davis.evan.m <at> gmail.com> wrote:
> 
> Confirmed, works as expected. Thanks!

Great! Closing this.

Yuan




This bug report was last modified 11 days ago.

Previous Next


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