Function: treesit-outline-search

treesit-outline-search is a byte-compiled function defined in treesit.el.gz.

Signature

(treesit-outline-search &optional BOUND MOVE BACKWARD LOOKING-AT)

Documentation

Search for the next outline heading in the syntax tree.

For BOUND, MOVE, BACKWARD, LOOKING-AT, see the descriptions in outline-search-function.

Source Code

;; Defined in /usr/src/emacs/lisp/treesit.el.gz
(defun treesit-outline-search (&optional bound move backward looking-at)
  "Search for the next outline heading in the syntax tree.
For BOUND, MOVE, BACKWARD, LOOKING-AT, see the descriptions in
`outline-search-function'."
  (if looking-at
      (when-let* ((node (or (treesit-thing-at (pos-eol) treesit-outline-predicate)
                            (treesit-thing-at (pos-bol) treesit-outline-predicate)))
                  (start (treesit-node-start node)))
        (eq (pos-bol) (save-excursion (goto-char start) (pos-bol))))

    (let* ((bob-pos
            ;; `treesit-navigate-thing' can't find a thing at bobp,
            ;; so use `looking-at' to match at bobp.
            (and (bobp) (treesit-outline-search bound move backward t) (point)))
           (pos
            ;; When function wants to find the current outline, point
            ;; is at the beginning of the current line.  When it wants
            ;; to find the next outline, point is at the second column.
            (unless bob-pos
              (if (eq (point) (pos-bol))
                  (if (bobp) (point) (1- (point)))
                (pos-eol))))
           (found (or bob-pos
                      (treesit-navigate-thing pos (if backward -1 1) 'beg
                                              treesit-outline-predicate))))
      (if found
          (if (or (not bound) (if backward (>= found bound) (<= found bound)))
              (progn
                (goto-char found)
                (goto-char (pos-bol))
                (set-match-data (list (point) (pos-eol)))
                t)
            (when move (goto-char bound))
            nil)
        (when move (goto-char (or bound (if backward (point-min) (point-max)))))
        nil))))