emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 057901f55a 3/3: Fix treesit-update-ranges


From: Yuan Fu
Subject: master 057901f55a 3/3: Fix treesit-update-ranges
Date: Tue, 22 Nov 2022 15:38:35 -0500 (EST)

branch: master
commit 057901f55ad12ebbc9cf092dd6ad0f02539849f9
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    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 88f94b8dec..6042b7e6c9 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]