]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix python-ts-mode triple quote syntax (bug#67262)
authorYuan Fu <casouri@gmail.com>
Sat, 23 Dec 2023 23:49:32 +0000 (15:49 -0800)
committerYuan Fu <casouri@gmail.com>
Sun, 24 Dec 2023 03:08:56 +0000 (19:08 -0800)
* lisp/progmodes/python.el (python--treesit-syntax-propertize): New function.
(python-ts-mode): Activate python--treesit-syntax-propertize.

lisp/progmodes/python.el

index 7c5c20608bd9d88b39d3d78e71439a0d24be9a5e..d7250148fadfc6eccf0d8d68a027ff40c0ce5091 100644 (file)
@@ -1228,6 +1228,21 @@ For NODE, OVERRIDE, START, END, and ARGS, see
      (treesit-node-start node) (treesit-node-end node)
      'font-lock-variable-use-face override start end)))
 
+(defun python--treesit-syntax-propertize (start end)
+  "Propertize triple-quote strings between START and END."
+  (save-excursion
+    (goto-char start)
+    (while (re-search-forward (rx (or "\"\"\"" "'''")) end t)
+      (let ((node (treesit-node-at (point))))
+        ;; The triple quotes surround a non-empty string.
+        (when (equal (treesit-node-type node) "string_content")
+          (let ((start (treesit-node-start node))
+                (end (treesit-node-end node)))
+            (put-text-property (1- start) start
+                               'syntax-table (string-to-syntax "|"))
+            (put-text-property end (min (1+ end) (point-max))
+                               'syntax-table (string-to-syntax "|"))))))))
+
 \f
 ;;; Indentation
 
@@ -6729,6 +6744,8 @@ implementations: `python-mode' and `python-ts-mode'."
                 #'python--treesit-defun-name)
     (treesit-major-mode-setup)
 
+    (setq-local syntax-propertize-function #'python--treesit-syntax-propertize)
+
     (python-skeleton-add-menu-items)
 
     (when python-indent-guess-indent-offset