Function: treesit-range-fn-exclude-children

treesit-range-fn-exclude-children is a byte-compiled function defined in treesit.el.gz.

Signature

(treesit-range-fn-exclude-children NODE OFFSET)

Documentation

Return ranges spanned by NODE but excluding its children.

OFFSET is added to the start and end of the overall range.

This can be used as a :range-fn in treesit-range-rules.

Source Code

;; Defined in /usr/src/emacs/lisp/treesit.el.gz
(defun treesit-range-fn-exclude-children (node offset)
  "Return ranges spanned by NODE but excluding its children.

OFFSET is added to the start and end of the overall range.

This can be used as a `:range-fn' in `treesit-range-rules'."
  (let* ((start (+ (treesit-node-start node) (or (car offset) 0)))
         (end (+ (treesit-node-end node) (or (cdr offset) 0)))
         (prev-end start)
         (ranges nil))
    (dolist (child (treesit-node-children node))
      (let ((child-start (treesit-node-start child))
            (child-end (treesit-node-end child)))
        ;; Filter out the case when PREV-END = CHILD-START.
        (when (< prev-end child-start)
          (push (cons prev-end child-start) ranges))
        (setq prev-end child-end)))
    (when (< prev-end end)
      (push (cons prev-end end) ranges))
    (nreverse ranges)))