Skip to content

Commit bf8dd18

Browse files
committed
core: Rename tree-traversal functions
- `tsc-traverse-depth-first-native` -> `tsc-traverse-mapc` - `tsc-traverse-depth-first-iterator` -> `tsc-traverse-iter` - `tsc-do-tree` -> `tsc-traverse-do`
1 parent 072a7ca commit bf8dd18

File tree

5 files changed

+57
-54
lines changed

5 files changed

+57
-54
lines changed

core/src/cursor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ fn _current_node<'e>(cursor: &RCursor, props: Option<Vector<'e>>, output: Option
325325
}
326326

327327
#[defun]
328-
fn _traverse_depth_first_native(tree_or_node: TreeOrNode, func: Value, props: Option<Vector>) -> Result<()> {
328+
fn _traverse_mapc(func: Value, tree_or_node: TreeOrNode, props: Option<Vector>) -> Result<()> {
329329
let mut iterator = DepthFirstIterator::new(tree_or_node);
330330
let env = func.env;
331331
let output = match props {

core/tsc.el

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -289,28 +289,29 @@ values.
289289
This wouldn't be necessary if the runtime supported stack-allocated objects.
290290
e.g. automatically through escape analysis. How about porting ELisp to GraalVM?")
291291

292-
(defun tsc-traverse-depth-first-native (tree-or-node fn &optional props)
293-
"Call FN for each node of TREE-OR-NODE.
292+
(defun tsc-traverse-mapc (func tree-or-node &optional props)
293+
"Call FUNC for each node of TREE-OR-NODE.
294294
The traversal is depth-first pre-order.
295295
296-
If the optional arg PROPS is a vector of keywords, FN is called with a vector
296+
If the optional arg PROPS is a vector of keywords, FUNC is called with a vector
297297
containing the corresponding node properties, instead of the node itself. For
298-
efficiency, this vector is reused across invocations of FN. *DO NOT* keep a
298+
efficiency, this vector is reused across invocations of FUNC. *DO NOT* keep a
299299
reference to it. It's recommended to use `pcase-let' to extract the properties.
300300
301301
For example, to crudely render a syntax tree:
302302
303-
(tsc-traverse-depth-first-native
304-
tree (lambda (props)
305-
(pcase-let ((`[,type ,depth ,named-p] props))
306-
(when named-p ;AST
307-
(insert (make-string depth \\? ) ;indentation
308-
(format \"%S\" type) \"\\n\"))))
303+
(tsc-traverse-mapc
304+
(lambda (props)
305+
(pcase-let ((`[,type ,depth ,named-p] props))
306+
(when named-p ;AST
307+
(insert (make-string depth \\? ) ;indentation
308+
(format \"%S\" type) \"\\n\"))))
309+
tree
309310
[:type :depth :named-p])
310311
"
311-
(tsc--traverse-depth-first-native tree-or-node fn props))
312+
(tsc--traverse-mapc func tree-or-node props))
312313

313-
(defun tsc-traverse-depth-first-iterator (tree-or-node &optional props)
314+
(defun tsc-traverse-iter (tree-or-node &optional props)
314315
"Return an iterator that traverse TREE-OR-NODE.
315316
The traversal is depth-first pre-order.
316317
@@ -321,7 +322,7 @@ to it. It's recommended to use `pcase-let' to extract the properties.
321322
322323
For example, to crudely render a syntax tree:
323324
324-
(iter-do (props (tsc-traverse-depth-first-iterator
325+
(iter-do (props (tsc-traverse-iter
325326
tree [:type :depth :named-p]))
326327
(pcase-let ((`[,type ,depth ,named-p] props))
327328
(when named-p ;AST
@@ -339,13 +340,13 @@ For example, to crudely render a syntax tree:
339340
(:close (setq iter nil))
340341
(_ (error "???"))))))
341342

342-
(cl-defmacro tsc-do-tree ((vars tree-or-node) &rest body)
343+
(cl-defmacro tsc-traverse-do ((vars tree-or-node) &rest body)
343344
"Evaluate BODY with VARS bound to properties of each node in TREE-OR-NODE.
344345
The traversal is depth-first pre-order.
345346
346347
VARS must be a vector of symbols. For example, to crudely render a syntax tree:
347348
348-
(tsc-do-tree ([type depth named-p] tree)
349+
(tsc-traverse-do ([type depth named-p] tree)
349350
(when named-p ;AST
350351
(insert (make-string depth \\? ) ;identation
351352
(format \"%S\" type) \"\\n\")))

doc/emacs-tree-sitter.org

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -630,26 +630,27 @@ These functions are high-level APIs that allow traversing the syntax tree in dep
630630

631631
When dealing with a large number of nodes, working with node objects creates a huge pressure on the garbage collector. For better performance, it's advisable to extract and work with individual node properties.
632632

633-
- ~tsc-do-tree~ /~(vars tree-or-node) body~/ :: Evaluate ~body~ with ~vars~ bound to corresponding properties of each traversed node.
633+
- ~tsc-traverse-do~ /~(vars tree-or-node) body~/ :: Evaluate ~body~ with ~vars~ bound to corresponding properties of each traversed node.
634634
#+begin_src emacs-lisp
635-
(tsc-do-tree ([type depth named-p] tree)
635+
(tsc-traverse-do ([type depth named-p] tree)
636636
(when named-p ;AST
637637
(insert (make-string depth \? ) ;indentation
638638
(format "%S" type) "\n")))
639639
#+end_src
640-
- ~tsc-traverse-depth-first-native~ /~tree-or-node fn [props]~/ :: Call ~fn~ for each traversed node, passing the node as the argument. If the vector of keywords ~props~ is specified, ~fn~ receives a vector containing the node's properties instead. *Do not keep a reference to the vector*, as it is reused across invocations. Use ~pcase-let~ to extract the properties.
640+
- ~tsc-traverse-mapc~ /~func tree-or-node [props]~/ :: Call ~func~ for each traversed node, passing the node as the argument. If the vector of keywords ~props~ is specified, ~func~ receives a vector containing the node's properties instead. *Do not keep a reference to the vector*, as it is reused across invocations. Use ~pcase-let~ to extract the properties.
641641
#+begin_src emacs-lisp
642-
(tsc-traverse-depth-first-native
643-
tree (lambda (props)
644-
(pcase-let ((`[,type ,depth ,named-p] props))
645-
(when named-p ;AST
646-
(insert (make-string depth \? ) ;indentation
647-
(format "%S" type) "\n"))))
642+
(tsc-traverse-mapc
643+
(lambda (props)
644+
(pcase-let ((`[,type ,depth ,named-p] props))
645+
(when named-p ;AST
646+
(insert (make-string depth \? ) ;indentation
647+
(format "%S" type) "\n"))))
648+
tree
648649
[:type :depth :named-p])
649650
#+end_src
650-
- ~tsc-traverse-depth-first-iterator~ /~tree-or-node [props]~/ :: Create an iterator that yields traversed nodes. If the vector of keywords ~props~ is specified, the iterator yields a vector containing the node's properties instead. *Do not keep a reference to the vector*, as it is reused across iterations. Use ~pcase-let~ to extract the properties.
651+
- ~tsc-traverse-iter~ /~tree-or-node [props]~/ :: Create an iterator that yields traversed nodes. If the vector of keywords ~props~ is specified, the iterator yields a vector containing the node's properties instead. *Do not keep a reference to the vector*, as it is reused across iterations. Use ~pcase-let~ to extract the properties.
651652
#+begin_src emacs-lisp
652-
(iter-do (props (tsc-traverse-depth-first-iterator
653+
(iter-do (props (tsc-traverse-iter
653654
tree [:type :depth :named-p]))
654655
(pcase-let ((`[,type ,depth ,named-p] props))
655656
(when named-p ;AST

lisp/tree-sitter-debug.el

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ This only takes effect if `tree-sitter-debug-jump-buttons' is non-nil."
6969
'points-to `(,start-byte . ,end-byte))
7070
(insert node-text)))))
7171

72-
(defvar tree-sitter-debug-traversal-method :do-tree)
72+
(defvar tree-sitter-debug-traversal-method :mapc)
7373

7474
(defun tree-sitter-debug--display-tree (_old-tree)
7575
"Display the current `tree-sitter-tree'."
@@ -79,20 +79,21 @@ This only takes effect if `tree-sitter-debug-jump-buttons' is non-nil."
7979
(let (buffer-read-only)
8080
(erase-buffer)
8181
(pcase tree-sitter-debug-traversal-method
82-
(:native (tsc-traverse-depth-first-native
83-
tree (lambda (props)
84-
(pcase-let ((`[,named-p ,type ,start-byte ,end-byte ,depth] props))
85-
(tree-sitter-debug--display-node
86-
named-p type start-byte end-byte depth)))
87-
[:named-p :type :start-byte :end-byte :depth]))
88-
(:iterator (iter-do (props (tsc-traverse-depth-first-iterator
89-
tree [:named-p :type :start-byte :end-byte :depth]))
90-
(pcase-let ((`[,named-p ,type ,start-byte ,end-byte ,depth] props))
91-
(tree-sitter-debug--display-node
92-
named-p type start-byte end-byte depth))))
93-
(:do-tree (tsc-do-tree ([named-p type start-byte end-byte depth] tree)
82+
(:mapc (tsc-traverse-mapc
83+
(lambda (props)
84+
(pcase-let ((`[,named-p ,type ,start-byte ,end-byte ,depth] props))
9485
(tree-sitter-debug--display-node
95-
named-p type start-byte end-byte depth))))))))
86+
named-p type start-byte end-byte depth)))
87+
tree
88+
[:named-p :type :start-byte :end-byte :depth]))
89+
(:iter (iter-do (props (tsc-traverse-iter
90+
tree [:named-p :type :start-byte :end-byte :depth]))
91+
(pcase-let ((`[,named-p ,type ,start-byte ,end-byte ,depth] props))
92+
(tree-sitter-debug--display-node
93+
named-p type start-byte end-byte depth))))
94+
(:do (tsc-traverse-do ([named-p type start-byte end-byte depth] tree)
95+
(tree-sitter-debug--display-node
96+
named-p type start-byte end-byte depth))))))))
9697

9798
(defun tree-sitter-debug--setup ()
9899
"Set up syntax tree debugging in the current buffer."

tests/tree-sitter-tests.el

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -372,19 +372,19 @@ source_file (1 . 20)
372372
(string=
373373
rendered
374374
(tsc-test-capture-messages
375-
(tsc-traverse-depth-first-native
376-
tree
375+
(tsc-traverse-mapc
377376
(lambda (props)
378377
(pcase-let ((`[,type ,named-p ,start-byte ,end-byte ,field ,depth] props))
379378
(tsc-test-render-node type named-p start-byte end-byte field depth)))
379+
tree
380380
[:type :named-p :start-byte :end-byte :field :depth])))))
381381
(ert-info ("Generator-based traversal should work")
382382
(should
383383
(string=
384384
rendered
385385
(tsc-test-capture-messages
386386
(cl-loop for item
387-
iter-by (tsc-traverse-depth-first-iterator
387+
iter-by (tsc-traverse-iter
388388
tree [:type :named-p :start-byte :end-byte :field :depth])
389389
do (pcase-let ((`[,type ,named-p ,start-byte ,end-byte ,field ,depth] item))
390390
(tsc-test-render-node type named-p start-byte end-byte field depth)))))))
@@ -393,7 +393,7 @@ source_file (1 . 20)
393393
(string=
394394
rendered
395395
(tsc-test-capture-messages
396-
(tsc-do-tree ([type named-p start-byte end-byte field depth] tree)
396+
(tsc-traverse-do ([type named-p start-byte end-byte field depth] tree)
397397
(tsc-test-render-node type named-p start-byte end-byte field depth)))))))))
398398

399399
(ert-deftest cursor::bench ()
@@ -405,24 +405,24 @@ source_file (1 . 20)
405405
(dolist (n '(1 10 100))
406406
(message "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
407407
(garbage-collect)
408-
(message " native %3d %s" n
408+
(message "%10s %3d %s" :mapc n
409409
(eval `(benchmark-run-compiled ,n
410-
(tsc-traverse-depth-first-native
411-
tree-sitter-tree
410+
(tsc-traverse-mapc
412411
tsc-test-no-op
412+
tree-sitter-tree
413413
,props))))
414414
(garbage-collect)
415-
(message " iterator %3d %s" n
415+
(message "%10s %3d %s" :iter n
416416
(eval `(benchmark-run-compiled ,n
417-
(iter-do (_ (tsc-traverse-depth-first-iterator tree-sitter-tree ,props))
417+
(iter-do (_ (tsc-traverse-iter tree-sitter-tree ,props))
418418
(tsc-test-no-op)))))
419419
(garbage-collect)
420-
(message " do-tree %3d %s" n
420+
(message "%10s %3d %s" :do n
421421
(eval `(benchmark-run-compiled ,n
422-
(tsc-do-tree ([named-p type start-byte end-byte] tree-sitter-tree)
422+
(tsc-traverse-do ([named-p type start-byte end-byte] tree-sitter-tree)
423423
named-p type start-byte end-byte))))
424424
(garbage-collect)
425-
(message " funcall %3d %s" n
425+
(message "%10s %3d %s" 'funcall n
426426
(eval `(benchmark-run-compiled ,(* 3429 n)
427427
(funcall tsc-test-no-op ,props 5))))))))
428428

@@ -639,7 +639,7 @@ We know it should since it is the `source_file' node."
639639
(rust-mode)
640640
(dolist (n '(1 10 100))
641641
(message "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
642-
(dolist (tree-sitter-debug-traversal-method '(:native :iterator :do-tree))
642+
(dolist (tree-sitter-debug-traversal-method '(:mapc :iter :do))
643643
(garbage-collect)
644644
(message "%10s %3d %s" tree-sitter-debug-traversal-method n
645645
(eval `(benchmark-run-compiled ,n

0 commit comments

Comments
 (0)