From ef8bfe90b7201f9f42484219267cec9d79d5b938 Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Fri, 18 Apr 2025 16:22:45 -0700 Subject: [PATCH] Handle offset in treesit--update-ranges-local (bug#77848) * lisp/treesit.el: (treesit--update-ranges-local): Add OFFSET parameter. (treesit-update-ranges): Pass offset to treesit--update-ranges-local. --- lisp/treesit.el | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lisp/treesit.el b/lisp/treesit.el index d40088178fc..a26625eca57 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -736,7 +736,7 @@ it." (delete-overlay ov))))) (defun treesit--update-ranges-local - (query embedded-lang modified-tick &optional beg end) + (query embedded-lang modified-tick &optional beg end offset) "Update range for local parsers between BEG and END. Use QUERY to get the ranges, and make sure each range has a local parser for EMBEDDED-LANG. @@ -748,11 +748,16 @@ property. When this function touches an overlay, it sets the `treesit-parser-ov-timestamp' property of the overlay to MODIFIED-TICK. This will help Emacs garbage-collect overlays that -aren't in use anymore." +aren't in use anymore. + +OFFSET is a cons of start and end offsets that are applied to the range +for the local parser." ;; Update range. (let* ((host-lang (treesit-query-language query)) (host-parser (treesit-parser-create host-lang)) - (ranges (treesit-query-range host-parser query beg end))) + (ranges (treesit-query-range host-parser query beg end)) + (offset-left (or (car offset) 0)) + (offset-right (or (cdr offset) 0))) (pcase-dolist (`(,beg . ,end) ranges) (let ((has-parser nil)) (setq @@ -780,7 +785,8 @@ aren't in use anymore." (overlay-put ov 'treesit-parser-ov-timestamp modified-tick) (treesit-parser-set-included-ranges - embedded-parser `((,beg . ,end))))))))) + embedded-parser `((,(+ beg offset-left) + . ,(+ end offset-right)))))))))) (defun treesit-update-ranges (&optional beg end) "Update the ranges for each language in the current buffer. @@ -803,7 +809,7 @@ region." ((functionp query) (funcall query beg end)) (local (treesit--update-ranges-local - query language modified-tick beg end)) + query language modified-tick beg end offset)) (t (let* ((host-lang (treesit-query-language query)) (parser (treesit-parser-create language))