Function: treesit--explorer-refresh-1
treesit--explorer-refresh-1 is a byte-compiled function defined in
treesit.el.gz.
Signature
(treesit--explorer-refresh-1)
Documentation
Update the syntax tree buffer.
Source Code
;; Defined in /usr/src/emacs/lisp/treesit.el.gz
(defun treesit--explorer-refresh-1 ()
"Update the syntax tree buffer."
(when (and treesit-explore-mode
(buffer-live-p treesit--explorer-buffer))
(let* ((root (treesit-node-on
(window-start) (window-end) treesit--explorer-parser))
;; Only highlight the current top-level construct.
;; Highlighting the whole buffer is slow and unnecessary.
;; But if the buffer is small (ie, used in playground
;; style), just highlight the whole buffer.
(top-level (if (< (buffer-size) 4000)
root
(treesit-node-first-child-for-pos
root (if (eolp)
(max (point-min) (1- (point)))
(point))
t)))
;; Only highlight node when region is active, if we
;; highlight node at point the syntax tree is too jumpy.
(nodes-hl
(when (region-active-p)
(treesit--explorer--nodes-to-highlight
treesit--explorer-parser)))
;; If we didn't edit the buffer nor change the top-level
;; node, don't redraw the whole syntax tree.
(highlight-only (treesit-node-eq
top-level treesit--explorer-last-node))
(source-buffer (current-buffer)))
(setq-local treesit--explorer-last-node top-level)
(with-current-buffer treesit--explorer-buffer
(let ((inhibit-read-only t))
(setq-local treesit--explorer-source-buffer source-buffer)
;; Redraw the syntax tree or just rehighlight the focused
;; node.
(when (and top-level (not highlight-only))
(erase-buffer)
(treesit--explorer-draw-node top-level))
(when-let* ((pos (treesit--explorer-highlight-node nodes-hl))
(window (get-buffer-window
treesit--explorer-buffer)))
(if highlight-only
(goto-char pos)
;; If HIGHLIGHT-ONLY is nil, we erased the buffer and
;; re-inserted text, scroll down from the very top until
;; we can see the highlighted node.
(goto-char (point-min))
(while (and (null (pos-visible-in-window-p pos window))
(= (forward-line 4) 0))
(set-window-start window (point))))
(set-window-point window pos)))))))