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
next prev parent 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).