emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/tree-sitter 2f6b017e3d 1/5: * admin/notes/tree-sitter/starter-gu


From: Yuan Fu
Subject: feature/tree-sitter 2f6b017e3d 1/5: * admin/notes/tree-sitter/starter-guide (Navigation): Improve demo.
Date: Mon, 10 Oct 2022 17:09:42 -0400 (EDT)

branch: feature/tree-sitter
commit 2f6b017e3dc646d317b56fb453c90aaa44c27089
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>

    * admin/notes/tree-sitter/starter-guide (Navigation): Improve demo.
---
 admin/notes/tree-sitter/starter-guide | 38 ++++++++++++++++++++++++-----------
 1 file changed, 26 insertions(+), 12 deletions(-)

diff --git a/admin/notes/tree-sitter/starter-guide 
b/admin/notes/tree-sitter/starter-guide
index 378ff581af..e573603862 100644
--- a/admin/notes/tree-sitter/starter-guide
+++ b/admin/notes/tree-sitter/starter-guide
@@ -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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]