* admin/notes/tree-sitter/starter-guide (Navigation): Improve demo.

This commit is contained in:
Yuan Fu 2022-10-10 11:00:51 -07:00
parent 2a762336da
commit 2f6b017e3d
No known key found for this signature in database
GPG key ID: 56E19BC57664A442

View file

@ -350,24 +350,38 @@ node.
Something like this should suffice:
#+begin_src elisp
(defun xxx-beginning-of-defun (&optional arg)
(if (> arg 0)
;; Go backward.
(defun js--treesit-beginning-of-defun (&optional arg)
(let ((arg (or arg 1)))
(if (> arg 0)
;; Go backward.
(while (and (> arg 0)
(treesit-search-forward-goto
"function_definition" 'start nil t))
(setq arg (1- arg)))
;; Go forward.
(while (and (< arg 0)
(treesit-search-forward-goto
"function_definition" 'start))
(setq arg (1+ arg))))))
(defun xxx-end-of-defun (&optional arg)
(let ((arg (or arg 1)))
(if (< arg 0)
;; Go backward.
(while (and (< arg 0)
(treesit-search-forward-goto
"function_definition" 'end nil t))
(setq arg (1+ arg)))
;; Go forward.
(while (and (> arg 0)
(treesit-search-forward-goto
"function_definition" 'start nil t))
(setq arg (1- arg)))
;; Go forward.
(while (and (< arg 0)
(treesit-search-forward-goto
"function_definition" 'start))
(setq arg (1+ arg)))))
"function_definition" 'end))
(setq arg (1- arg))))))
(setq-local beginning-of-defun-function #'xxx-beginning-of-defun)
(setq-local end-of-defun-function #'xxx-end-of-defun)
#+end_src
And the same for end-of-defun.
* Which-func
You can find the current function by going up the tree and looking for