unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Wilhelm Kirschbaum <wkirschbaum@gmail.com>
To: Yuan Fu <casouri@gmail.com>
Cc: 66183@debbugs.gnu.org, jm@pub.pink
Subject: bug#66183: elixir-ts-mode test failure
Date: Tue, 26 Sep 2023 22:26:11 +0200	[thread overview]
Message-ID: <87r0mky8iy.fsf@gmail.com> (raw)
In-Reply-To: <A0D74FBA-C568-4525-A283-650A3D7FC1D1@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1367 bytes --]

>>> need to adjust it but the idea is there.
>>> 
>>> With the new language-at-point definition, treesit-language-at 
>>> can
>>> return the correct language, and the test passes again.
>>> 
>>> Yuan
>>> 
>>> [2. text/x-patch; example.diff]...
>> 
>> This seems to work if you set named on: 
>> treesit-node-prev-sibling,
>> otherwise it just tries to match the \"\"\" against H or F.
>> 
>>  (let* ((node (treesit-node-at point 'elixir)))
>>    (if (and (equal (treesit-node-type node) "quoted_content")
>>             (string-match-p
>>              (rx bos (or "H" "F") eos)
>> -              (treesit-node-text (treesit-node-prev-sibling 
>> node))))
>> +              (treesit-node-text (treesit-node-prev-sibling 
>> node t))))
>>        'heex
>>      'elixir)))
>> 
>> I will spend some time in the next couple of hours to catch up 
>> to all
>> the changes.
>
> Ah, right. I’ll leave the specifics to you. As long as the 
> language is derived from the node at point rather than parser 
> range, it will be fine. Also, there’s no rush.
>

Hi Yuan,

With the new changes I had to update some indentation rules as 
well.
The following patch was tested against a couple of elixir files.

There is another indentation issue with HEEx embeds, but think its
unrelated to this issue and will have a look this weekend.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Fix treesit-language-at-point for elixir-ts-mode --]
[-- Type: text/x-patch, Size: 3540 bytes --]

From 046950eb63b5499ab7f60434c5ebd0bbe5ada274 Mon Sep 17 00:00:00 2001
From: Wilhelm H Kirschbaum <wkirschbaum@gmail.com>
Date: Tue, 26 Sep 2023 21:32:40 +0200
Subject: [PATCH] Fix treesit-langauge-at-point for elixir-ts-mode.

The treesit-language-at-point function is only suppose to query the
host language.

* lisp/progmodes/elixir-ts-mode.el
(elixir-ts--indent-rules): Add missing rules.
(elixir-ts--treesit-language-at-point): Update function to only query
the host language.
* test/lisp/progmodes/elixir-ts-mode-resources/indent.erts: Add test
for inline docs.
---
 lisp/progmodes/elixir-ts-mode.el              | 35 ++++++++++---------
 .../elixir-ts-mode-resources/indent.erts      | 16 +++++++++
 2 files changed, 35 insertions(+), 16 deletions(-)

diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el
index 7175fe4bff8..fd4400c6c53 100644
--- a/lisp/progmodes/elixir-ts-mode.el
+++ b/lisp/progmodes/elixir-ts-mode.el
@@ -312,7 +312,16 @@ elixir-ts--indent-rules
        ((parent-is "^catch_block$") parent ,offset)
        ((parent-is "^keywords$") parent-bol 0)
        ((node-is "^call$") parent-bol ,offset)
-       ((node-is "^comment$") parent-bol ,offset)))))
+       ((node-is "^comment$") parent-bol ,offset)
+       ((node-is "\"\"\"") parent-bol 0)
+       ;; Handle quoted_content indentation on the last
+       ;; line before the closing \"\"\", where it might
+       ;; see it as no-node outside a HEEx tag.
+       (no-node (lambda (_n _p _bol)
+                  (treesit-node-start
+                   (treesit-node-parent
+                    (treesit-node-at (point) 'elixir))))
+                  0)))))
 
 (defvar elixir-ts--font-lock-settings
   (treesit-font-lock-rules
@@ -510,21 +519,15 @@ elixir-ts--treesit-anchor-grand-parent-bol
 
 (defun elixir-ts--treesit-language-at-point (point)
   "Return the language at POINT."
-  (let* ((range nil)
-         (language-in-range
-          (cl-loop
-           for parser in (treesit-parser-list)
-           do (setq range
-                    (cl-loop
-                     for range in (treesit-parser-included-ranges parser)
-                     if (and (>= point (car range)) (<= point (cdr range)))
-                     return parser))
-           if range
-           return (treesit-parser-language parser))))
-    (if (null language-in-range)
-        (when-let ((parser (car (treesit-parser-list))))
-          (treesit-parser-language parser))
-      language-in-range)))
+  (let ((node (treesit-node-at point 'elixir)))
+    (if (and (equal (treesit-node-type node) "quoted_content")
+             (let ((prev-sibling (treesit-node-prev-sibling node t)))
+               (when (treesit-node-p prev-sibling)
+                 (string-match-p
+                  (rx bos (or "H" "F") eos)
+                  (treesit-node-text (treesit-node-prev-sibling node t))))))
+        'heex
+      'elixir)))
 
 (defun elixir-ts--defun-p (node)
   "Return non-nil when NODE is a defun."
diff --git a/test/lisp/progmodes/elixir-ts-mode-resources/indent.erts b/test/lisp/progmodes/elixir-ts-mode-resources/indent.erts
index 1f855d3c977..fe09a37a32b 100644
--- a/test/lisp/progmodes/elixir-ts-mode-resources/indent.erts
+++ b/test/lisp/progmodes/elixir-ts-mode-resources/indent.erts
@@ -330,6 +330,22 @@ Name: Long tuple
  "October", "November", "December"}
 =-=-=
 
+Name: Doc
+
+=-=
+defmodule Foo do
+"""
+    bar
+    """
+end
+=-=
+defmodule Foo do
+  """
+    bar
+  """
+end
+=-=-=
+
 Name: Embedded HEEx
 
 =-=
-- 
2.42.0


[-- Attachment #3: Type: text/plain, Size: 14 bytes --]


Wilhelm






  reply	other threads:[~2023-09-26 20:26 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-24 16:53 bug#66183: elixir-ts-mode test failure john muhl via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-25  3:12 ` Yuan Fu
2023-09-25 16:01   ` john muhl via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-26  6:18     ` Wilhelm Kirschbaum
2023-09-26 16:30   ` Wilhelm Kirschbaum
2023-09-26 18:00     ` Yuan Fu
2023-09-26 20:26       ` Wilhelm Kirschbaum [this message]
2023-09-27  6:46         ` Yuan Fu
2023-09-27  7:17           ` Wilhelm Kirschbaum
2023-09-29 11:14       ` Eli Zaretskii
2023-10-05  7:18         ` Eli Zaretskii
2023-10-07  8:44           ` Wilhelm Kirschbaum
2023-10-07  9:05             ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87r0mky8iy.fsf@gmail.com \
    --to=wkirschbaum@gmail.com \
    --cc=66183@debbugs.gnu.org \
    --cc=casouri@gmail.com \
    --cc=jm@pub.pink \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).