GNU bug report logs -
#72184
31.0.50; typescript-ts-mode does not bind RET to newline-and-indent
Previous Next
Full log
Message #26 received at 72184 <at> debbugs.gnu.org (full text, mbox):
Hi Jostein,
On 31/07/2024 11:55, Jostein Kjønigsen wrote:
> PREFACE
>
> I've now looked further into this issue, and what we're actually seeing
> here is not indentation code "not working", but indentation rules not
> taking into account incomplete parse-trees while code is being written.
Makes sense, thanks.
> So as the original bug-submitter, I will have to just declare that the
> original bug-description is clearly inaccurate. Sorry about that!
>
> Below is my attempt to better express what is actually failing and why.
>
> *My hypothesis is that this could be an issue for other tree-sitter
> based major-modes as well, and maintainers of those modes are encouraged
> to check for similar issues.*
>
> If more major-modes than typescript-ts-mode is affected, the optimum
> solution may best be decided together, rather than individually per mode.
>
> AS FOR THE BUG - DETAILS
>
> Consider the following pre-existing typescript/javascript function:
>
> function stuff() {
> // TODO implement
> }
>
>
> Using the typescript tree-sitter grammer, it gets the following nodes in
> its tree-sitter AST:
>
> (function_declaration function name: (identifier)
> parameters: (formal_parameters ( ))
> body: (statement_block { (comment) }))
>
> This matches the rules for indentation in typescript-ts-mode and indents
> correctly regardless.
>
> But in a bare config with only electric-indent-mode enabled (and not
> electric-pair-mode), trying to enter a new function will produce a
> incomplete syntax tree, due to the missing final brace.
>
> The code will look like this:
>
> function gnu2() { // NOTE: no closing brace!
>
>
> And the tree-sitter AST will then look like this until completed:
>
> (expression_statement
> (function function name: (identifier)
> parameters: (formal_parameters ( ))
> body: (statement_block { (comment) }))))
>
>
> And typescript-ts-mode has no indentation rules for this AST. *Thus
> pressing enter wont cause indentation, despite electric-indent-mode
> being enabled.*
>
> I suspect this sort of issue could possibly affect other treesitter
> based modes which has been developed mostly in existing configs with
> "all the bells and whistles" (like electric-pair-mode) enabled.
>
> I'll hold off any fixes or suggestions for such until we have some
> reports from other maintainers, if that is ok?
We've seen this before - take a look at https://debbugs.gnu.org/62717,
for example.
In short, some ad-hoc counter-measures can and sometimes are added
(proposals welcome), but ultimately when we know we can't reliably
distinguish problem situations, or can only detect a minor fraction of
them, we're also okay giving up and recommending people use
electric-pair-mode for better experience.
This bug report was last modified 1 year and 6 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.