GNU bug report logs -
#76704
30.1; Indentation of braces on separate line in js-ts-mode
Previous Next
Reported by: Fabian Brosda <f.brosda <at> gmx.de>
Date: Mon, 3 Mar 2025 04:33:03 UTC
Severity: minor
Found in version 30.1
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Hi,
thanks for the explanation and the patch. The result from the patch is
a GNU-style indentation, where only the braces for functions are not
indented, while braces for other blocks (if/else, loops, arrow
functions) are indented.
What I would like to have is Allman style indentation, where the braces
for blocks like if/else indent the same as for functions. This also
seems the default behavior in the old js-mode. In this case I think it
would be correct to not indent the brace for the arrow function. For
reference, I found an issue in eslint regarding this indentation:
https://github.com/eslint/eslint/issues/8493
Would it be possible to also support the later?
Fabian
Vincenzo Pupillo <v.pupillo <at> gmail.com> writes:
> Ciao,
> a rule like this:
> ((node-is "statement_block") parent-bol 0)
>
> works for function but brakes the indentation of expressione like this:
> const Geek = (a, b) =>
> {
> return (a + " " + b);
> }
>
>
> In the attached patch, I have added a new rule specifically for this case.
>
> Vincenzo
>
> In data sabato 22 marzo 2025 13:24:16 Ora standard dell’Europa centrale, Eli
> Zaretskii ha scritto:
>> Ping! Juri and Vincenzo, please chime in.
>>
>> > Cc: 76704 <at> debbugs.gnu.org
>> > Date: Sun, 09 Mar 2025 12:00:16 +0200
>> > From: Eli Zaretskii <eliz <at> gnu.org>
>> >
>> > > Date: Sun, 02 Mar 2025 20:44:39 +0100
>> > > From: Fabian Brosda via "Bug reports for GNU Emacs,
>> > >
>> > > the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> > >
>> > > Hi,
>> > >
>> > > when using js-ts-mode instead of js-mode, braces, which are put on a
>> > > separate line are indented one level too much. Here is a simple example
>> > > of how the indentation looks like, after using indent-region on the
>> > > whole function:
>> > >
>> > > ```
>> > > function test(x)
>> > >
>> > > {
>> > >
>> > > if(x)
>> > >
>> > > {
>> > >
>> > > return a;
>> > >
>> > > }
>> > >
>> > > else
>> > >
>> > > {
>> > >
>> > > return b;
>> > >
>> > > }
>> > >
>> > > }
>> > >
>> > > ```
>> > >
>> > > The used tree-sitter grammar is downloaded from
>> > > https://github.com/tree-sitter/tree-sitter-javascript.
>> > >
>> > > Having braces on a separate line is probably not the most common for
>> > > javascript, but using indent-region in the js-mode, does yield the
>> > > expected result. The js.el file does already contain a comment
>> > > mentioning braces in js--treesit-indent-rules. But even based on the
>> > > git history it is not clear to me, what exactly is meant:
>> > >
>> > > ```
>> > >
>> > > ;; "{" on the newline.
>> > > ((node-is "statement_block") parent-bol js-indent-level)
>> > >
>> > > ```
>> > >
>> > > Link:
>> > > https://github.com/emacs-mirror/emacs/blob/master/lisp/progmodes/js.el#
>> > > L3457
>> > >
>> > > If I replace 'js-indent-level' with '0' in this line, the indentation
>> > > would
>> > > be correct, but this might have unwanted side-effects I overlooked.
>> > >
>> > > My current emacs version:
>> > >
>> > > GNU Emacs 30.1 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.48,
>> > > cairo version 1.18.2)
>> > >
>> > > Thanks for looking into this.
>> >
>> > Juri and Vincenzo, any comments?
>
> From 56f0bfe99b0c4cda1e36686e48c58d0d017bda21 Mon Sep 17 00:00:00 2001
> From: Vincenzo Pupillo <v.pupillo <at> gmail.com>
> Date: Sat, 22 Mar 2025 23:43:52 +0100
> Subject: [PATCH] Fix indentation of "{" when on a new line of a function
> declaration.
>
> * lisp/progmodes/js.el
> (js--treesit-indent-rules): New rule for the indentation of "{" when
> of a new line of a function declaration. (bug#76704)
> ---
> lisp/progmodes/js.el | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
> index 3e789218fde..6943ffc2d28 100644
> --- a/lisp/progmodes/js.el
> +++ b/lisp/progmodes/js.el
> @@ -3464,7 +3464,10 @@ js--treesit-indent-rules
> ((parent-is "ternary_expression") parent-bol js-indent-level)
> ((parent-is "member_expression") parent-bol js-indent-level)
> ((node-is ,switch-case) parent-bol 0)
> - ;; "{" on the newline.
> + ;; "{" on the newline for functions.
> + ((query "(function_declaration body: (statement_block \"{\") @indent)")
> + parent-bol 0)
> + ;; "{" on the newline in other cases.
> ((node-is "statement_block") parent-bol js-indent-level)
> ((parent-is "named_imports") parent-bol js-indent-level)
> ((parent-is "statement_block") parent-bol js-indent-level)
> --
> 2.49.0
This bug report was last modified 90 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.