]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix heex-ts-mode indentation following previews elixir-mode change
authorYuan Fu <casouri@gmail.com>
Wed, 11 Sep 2024 02:29:31 +0000 (19:29 -0700)
committerEshel Yaron <me@eshelyaron.com>
Sat, 14 Sep 2024 20:21:00 +0000 (22:21 +0200)
After the previous fix in elixir-ts-mode (0fd259d166c), embedded heex
code are indented like this:

1 defmodule Foo do
2   def foo(assigns) do
3     ~H"""
4 <span>
5   text
6 </span>
7     """
8   end
9 end

The indent rule finds the beginning of the parent heex node, and uses
the indentation of that line as anchor with an offset of 0.  Previously
the parent heex node (fragment) starts at EOL of line 3; after the
previous commit, it now starts at BOL of line 4.  To fix the
indentation, I changed the anchor to the beginning of the elixir
(rather than heex) node at point, which is at EOL at line 3.

* lisp/progmodes/heex-ts-mode.el (heex-ts--indent-rules): Use the elixir
node that contains the heex code as the anchor, instead of the heex root
node.

(cherry picked from commit c5925b6ba5f7821ea72ebd26b76e405cecaabb8e)

lisp/progmodes/heex-ts-mode.el

index 07b8bfdc74f2ac12d087695e8bc9f8dbc05024e8..b527d96b5794a35b6c27de4d5b82d08aff77665e 100644 (file)
   (let ((offset heex-ts-indent-offset))
     `((heex
        ((parent-is "fragment")
-        (lambda (node parent &rest _)
+        (lambda (_node _parent bol &rest _)
           ;; If HEEx is embedded indent to parent
           ;; otherwise indent to the bol.
           (if (eq (treesit-language-at (point-min)) 'heex)
               (point-min)
             (save-excursion
-              (goto-char (treesit-node-start parent))
+              (goto-char (treesit-node-start
+                          (treesit-node-at bol 'elixir)))
               (back-to-indentation)
               (point))
-            )) 0)
+            ))
+        0)
        ((node-is "end_tag") parent-bol 0)
        ((node-is "end_component") parent-bol 0)
        ((node-is "end_slot") parent-bol 0)