emacs-diffs
[Top][All Lists]
Advanced

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

master c6bbc20c388 1/2: Propertize heredocs in elixir-ts-mode


From: Eli Zaretskii
Subject: master c6bbc20c388 1/2: Propertize heredocs in elixir-ts-mode
Date: Thu, 6 Apr 2023 06:06:27 -0400 (EDT)

branch: master
commit c6bbc20c388fe461db3514db68f3803f44caf01f
Author: Wilhelm H Kirschbaum <wkirschbaum@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    Propertize heredocs in elixir-ts-mode
    
    * lisp/progmodes/elixir-ts-mode.el
    (elixir-ts--syntax-propertize-query): New variable.
    (elixir-ts--syntax-propertize): New helper.
    (elixir-ts-mode): Set syntax-propertize-function.  (Bug#62536)
---
 lisp/progmodes/elixir-ts-mode.el | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/lisp/progmodes/elixir-ts-mode.el b/lisp/progmodes/elixir-ts-mode.el
index 6d7420b63dc..e2d9515c10f 100644
--- a/lisp/progmodes/elixir-ts-mode.el
+++ b/lisp/progmodes/elixir-ts-mode.el
@@ -55,7 +55,9 @@
 (declare-function treesit-parser-list "treesit.c")
 (declare-function treesit-node-parent "treesit.c")
 (declare-function treesit-node-start "treesit.c")
+(declare-function treesit-node-end "treesit.c")
 (declare-function treesit-query-compile "treesit.c")
+(declare-function treesit-query-capture "treesit.c")
 (declare-function treesit-node-eq "treesit.c")
 (declare-function treesit-node-prev-sibling "treesit.c")
 
@@ -550,6 +552,22 @@ Return nil if NODE is not a defun node or doesn't have a 
name."
                 (_ nil))))
     (_ nil)))
 
+(defvar elixir-ts--syntax-propertize-query
+  (when (treesit-available-p)
+    (treesit-query-compile
+     'elixir
+     '(((["\"\"\""] @quoted-text))))))
+
+(defun elixir-ts--syntax-propertize (start end)
+  "Apply syntax text properties between START and END for `elixir-ts-mode'."
+  (let ((captures
+         (treesit-query-capture 'elixir elixir-ts--syntax-propertize-query 
start end)))
+    (pcase-dolist (`(,name . ,node) captures)
+      (pcase-exhaustive name
+        ('quoted-text
+         (put-text-property (1- (treesit-node-end node)) (treesit-node-end 
node)
+                            'syntax-table (string-to-syntax "$")))))))
+
 ;;;###autoload
 (define-derived-mode elixir-ts-mode prog-mode "Elixir"
   "Major mode for editing Elixir, powered by tree-sitter."
@@ -630,7 +648,8 @@ Return nil if NODE is not a defun node or doesn't have a 
name."
                     ( elixir-sigil elixir-string-escape
                       elixir-string-interpolation ))))
 
-    (treesit-major-mode-setup)))
+    (treesit-major-mode-setup)
+    (setq-local syntax-propertize-function #'elixir-ts--syntax-propertize)))
 
 (if (treesit-ready-p 'elixir)
     (progn



reply via email to

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