]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix apostrophe handling in rust-ts-mode and go-ts-mode (Bug#63708)
authorЙордан Миладинов <yordanm@pm.me>
Fri, 26 May 2023 14:23:26 +0000 (17:23 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 3 Jun 2023 08:30:18 +0000 (11:30 +0300)
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode--syntax-propertize):
Treat apostrophes as strings if used to define character literals.
Treat LT and GT as pairs if used to define type parameters (formerly
they were treated as pairs only for type arguments).
* lisp/progmodes/go-ts-mode.el (go-ts-mode--syntax-table): Treat
apostrophes as strings if used to define rune literals.

Copyright-paperwork-exempt: yes

lisp/progmodes/go-ts-mode.el
lisp/progmodes/rust-ts-mode.el

index 4233b115f193ca458f26d67b91a917f41d97a84e..698c6424ea230ea6e56e502f9cb3c8f1a35313be 100644 (file)
@@ -58,6 +58,7 @@
     (modify-syntax-entry ?<   "."      table)
     (modify-syntax-entry ?>   "."      table)
     (modify-syntax-entry ?\\  "\\"     table)
+    (modify-syntax-entry ?\'  "\""     table)
     (modify-syntax-entry ?/   ". 124b" table)
     (modify-syntax-entry ?*   ". 23"   table)
     (modify-syntax-entry ?\n  "> b"    table)
index be06acde3e36bceda9c784180aa4e26c9a7fb0b0..360fcc89491f3e613a677074d2df86b1253574d2 100644 (file)
@@ -350,7 +350,10 @@ Return nil if there is no name or if NODE is not a defun node."
       (treesit-node-child-by-field-name node "name") t))))
 
 (defun rust-ts-mode--syntax-propertize (beg end)
-  "Apply syntax text property to template delimiters between BEG and END.
+  "Apply syntax properties to various special characters with
+contextual meaning between BEG and END.
+
+' should be treated as string when used for char literals.
 
 < and > are usually punctuation, e.g., as greater/less-than.  But
 when used for types, they should be considered pairs.
@@ -359,11 +362,18 @@ This function checks for < and > in the changed RANGES and apply
 appropriate text property to alter the syntax of template
 delimiters < and >'s."
   (goto-char beg)
+  (while (search-forward "'" end t)
+    (when (string-equal "char_literal"
+                        (treesit-node-type
+                         (treesit-node-at (match-beginning 0))))
+      (put-text-property (match-beginning 0) (match-end 0)
+                         'syntax-table (string-to-syntax "\""))))
+  (goto-char beg)
   (while (re-search-forward (rx (or "<" ">")) end t)
     (pcase (treesit-node-type
             (treesit-node-parent
              (treesit-node-at (match-beginning 0))))
-      ("type_arguments"
+      ((or "type_arguments" "type_parameters")
        (put-text-property (match-beginning 0)
                           (match-end 0)
                           'syntax-table