Subject: Re: bug#70074: 29.1; js-ts-mode doesn't define comment-line-break-function

From: Yuan Fu <[email-masked]>
Date: Sun, 21 Apr 2024 21:35:24 -0700

> On Apr 20, 2024, at 12:44 AM, Eli Zaretskii <[email-masked]> wrote:
> 
> Ping!  Yuan, can we make some progress here?
> 
>> From: Yuan Fu <[email-masked]>
>> Date: Mon, 8 Apr 2024 00:10:32 -0700
>> Cc: Eli Zaretskii <[email-masked]>,
>> Evan Davis <[email-masked]>,
>> [email-masked]
>> 
>> 
>> 
>>> On Apr 4, 2024, at 5:28 PM, Dmitry Gutov <[email-masked]> wrote:
>>> 
>>> On 04/04/2024 15:32, Eli Zaretskii wrote:
>>>>> From:Evan Davis<[email-masked]>
>>>>> 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