* admin/notes/tree-sitter/starter-guide (Navigation): Improve demo.
This commit is contained in:
parent
2a762336da
commit
2f6b017e3d
1 changed files with 26 additions and 12 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue