]> git.eshelyaron.com Git - emacs.git/commitdiff
python--treesit-syntax-propertize: Fix edits in the middle
authorDmitry Gutov <dmitry@gutov.dev>
Fri, 26 Jan 2024 01:00:04 +0000 (03:00 +0200)
committerEshel Yaron <me@eshelyaron.com>
Fri, 26 Jan 2024 11:22:51 +0000 (12:22 +0100)
* lisp/progmodes/python.el (python--treesit-syntax-propertize):
Process the beginning and the end of the triple-quoted string's
delimiters separately.  Among other things, that still works when
the beginning is outside of the propertized region (bug#68445).

(cherry picked from commit 737d46e04d73dbad84bf0225cebb1c936ff89365)

lisp/progmodes/python.el

index e2f614f52c213fc909a10f152deaa8fab57e9285..41f612c8b1c3350049a576c9bdbc9862db6cfc00 100644 (file)
@@ -1359,15 +1359,15 @@ For NODE, OVERRIDE, START, END, and ARGS, see
   (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 "|"))))))))
+      (let ((node (treesit-node-at (- (point) 3))))
+        ;; Handle triple-quoted strings.
+        (pcase (treesit-node-type node)
+          ("string_start"
+           (put-text-property (1- (point)) (point)
+                              'syntax-table (string-to-syntax "|")))
+          ("string_end"
+           (put-text-property (- (point) 3) (- (point) 2)
+                              'syntax-table (string-to-syntax "|"))))))))
 
 \f
 ;;; Indentation