python--treesit-syntax-propertize: Fix edits in the middle

* 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).
This commit is contained in:
Dmitry Gutov 2024-01-26 03:00:04 +02:00
parent 22a58fccb7
commit 737d46e04d

View 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 "|"))))))))
;;; Indentation