From 057901f55ad12ebbc9cf092dd6ad0f02539849f9 Mon Sep 17 00:00:00 2001 From: Yuan Fu <casouri@gmail.com> Date: Tue, 22 Nov 2022 12:01:53 -0800 Subject: [PATCH] Fix treesit-update-ranges * lisp/treesit.el (treesit--clip-ranges): New function. (treesit-update-ranges): Now clips the range within (point-min) and (point-max), so the new range we use are not out-of-range. --- lisp/treesit.el | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lisp/treesit.el b/lisp/treesit.el index 88f94b8dec1..6042b7e6c96 100644 --- a/lisp/treesit.el +++ b/lisp/treesit.el @@ -460,6 +460,15 @@ Return the merged list of ranges." (push range result))) (nreverse result))) +(defun treesit--clip-ranges (ranges start end) + "Clip RANGES in between START and END. +RANGES is a list of ranges of the form (BEG . END). Ranges +outside of the region between START and END are thrown away, and +those inside are kept." + (cl-loop for range in ranges + if (<= start (car range) (cdr range) end) + collect range)) + (defun treesit-update-ranges (&optional beg end) "Update the ranges for each language in the current buffer. If BEG and END are non-nil, only update parser ranges in that @@ -480,8 +489,10 @@ region." (old-ranges (treesit-parser-included-ranges parser)) (new-ranges (treesit-query-range host-lang query beg end)) - (set-ranges (treesit--merge-ranges - old-ranges new-ranges beg end))) + (set-ranges (treesit--clip-ranges + (treesit--merge-ranges + old-ranges new-ranges beg end) + (point-min) (point-max)))) (dolist (parser (treesit-parser-list)) (when (eq (treesit-parser-language parser) language) -- 2.39.5