Function: treesit--update-range-1

treesit--update-range-1 is a byte-compiled function defined in treesit.el.gz.

Signature

(treesit--update-range-1 BEG END HOST-PARSER SETTINGS EMBED-LEVEL)

Documentation

Given a HOST-PARSER, update ranges between BEG and END.

Go over each settings in SETTINGS, try to create or update the embedded language in that setting. Return the list of the created or updated embedded language parsers.

EMBED-LEVEL is the embed level for the embedded parser being created or updated. When looking for existing embedded parsers, only look for parsers of this level; when creating new parsers, set their level to this level.

Function range settings in SETTINGS are ignored.

Source Code

;; Defined in /usr/src/emacs/lisp/treesit.el.gz
(defun treesit--update-range-1 (beg end host-parser settings embed-level)
  "Given a HOST-PARSER, update ranges between BEG and END.

Go over each settings in SETTINGS, try to create or update the embedded
language in that setting.  Return the list of the created or updated
embedded language parsers.

EMBED-LEVEL is the embed level for the embedded parser being created or
updated.  When looking for existing embedded parsers, only look for
parsers of this level; when creating new parsers, set their level to
this level.

Function range settings in SETTINGS are ignored."
  (let ((touched-parsers nil)
        (modified-tick (buffer-chars-modified-tick)))
    (dolist (setting settings)
      (let* ((query (nth 0 setting))
             (query-lang (if (functionp query)
                             'never
                           (treesit-query-language query)))
             (embed-lang (nth 1 setting))
             (local (nth 2 setting))
             (offset (nth 3 setting))
             (range-fn (nth 4 setting)))
        (when (eq query-lang (treesit-parser-language host-parser))
          (cond
           ;; Function range settings don't participate in the recursive
           ;; update, they're handled by `treesit--update-range'.
           ((functionp query) nil)
           (local
            (setq touched-parsers
                  (append touched-parsers
                          (treesit--update-ranges-local
                           host-parser query embed-lang modified-tick
                           embed-level beg end offset range-fn))))
           ;; When updating ranges, we want to avoid querying the whole
           ;; buffer which could be slow in very large buffers.
           ;; Instead, we only query for nodes that intersect with the
           ;; region between BEG and END.  Also, we only update the
           ;; ranges intersecting BEG and END; outside of that region we
           ;; inherit old ranges.
           (t (setq touched-parsers
                    (append touched-parsers
                            (treesit--update-ranges-non-local
                             host-parser query embed-lang modified-tick
                             embed-level beg end offset range-fn))))))))
    touched-parsers))