bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Yuan Fu
Subject: 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@gnu.org> wrote:
> 
> Ping!  Yuan, can we make some progress here?
> 
>> From: Yuan Fu <casouri@gmail.com>
>> Date: Mon, 8 Apr 2024 00:10:32 -0700
>> Cc: Eli Zaretskii <eliz@gnu.org>,
>> Evan Davis <davis.evan.m@gmail.com>,
>> 70074@debbugs.gnu.org
>> 
>> 
>> 
>>> On Apr 4, 2024, at 5:28 PM, Dmitry Gutov <dmitry@gutov.dev> wrote:
>>> 
>>> On 04/04/2024 15:32, Eli Zaretskii wrote:
>>>>> From:Evan Davis<davis.evan.m@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 via email to

[Prev in Thread] Current Thread [Next in Thread]