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

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

bug#61502: 29.0.60; c-ts-mode auto-indent not working


From: Dmitry Gutov
Subject: bug#61502: 29.0.60; c-ts-mode auto-indent not working
Date: Wed, 15 Feb 2023 02:12:23 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2

On 14/02/2023 23:00, Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors wrote:

On 14 February 2023 21:59:03 CET, Dmitry Gutov<dgutov@yandex.ru>  wrote:
On 14/02/2023 21:41, Theodor Thornhill via Bug reports for GNU Emacs, the Swiss 
army knife of text editors wrote:
diff --git a/lisp/treesit.el b/lisp/treesit.el
index 749781894b..300a703515 100644
--- a/lisp/treesit.el
+++ b/lisp/treesit.el
@@ -1418,6 +1418,8 @@ treesit--indent-1
            ;; encompass the whitespace.
            (parent (cond ((and node parser)
                           (treesit-node-parent node))
+                       ((equal (treesit-node-type smallest-node) "}")
+                        (treesit-node-parent smallest-node))
                          (t (treesit-node-on bol bol)))))
         (funcall treesit-indent-function node parent bol))))
Is it a good idea to add C-specific constants to generic code?

Other modes might not have a node called "}" at all.
Yeah this was merely an example. There may be some "block-ender" concept one 
could envision. I need to experiment with it, and it may not be feasible at all

I was thinking we could use a more/grammar-specific override to choose which node to use to base the indentation on.

I.e. being able to override this piece of logic:

               (treesit-parent-while
                smallest-node
                (lambda (node)
                  (and (eq bol (treesit-node-start node))
                       (not (treesit-node-eq node root)))))

It could also help with issues like https://debbugs.gnu.org/cgi/bugreport.cgi?bug=60602#8, to avoid duplication in indentation rules.

AFAICT this is largely possible to do already by changing treesit-indent-function to some mode-specific wrapper, but an override like the above could be written more succinctly.





reply via email to

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