|
From: | Jostein Kjønigsen |
Subject: | bug#72184: 31.0.50; typescript-ts-mode does not bind RET to newline-and-indent |
Date: | Wed, 31 Jul 2024 10:55:00 +0200 |
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. 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:
Using the typescript tree-sitter grammer, it gets the following nodes in its tree-sitter AST:
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:
And the tree-sitter AST will then look like this until completed:
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? -- Jostein |
[Prev in Thread] | Current Thread | [Next in Thread] |