[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-29 1fc7535546 3/4: Use cursor API in treesit-node-parent
From: |
Yuan Fu |
Subject: |
emacs-29 1fc7535546 3/4: Use cursor API in treesit-node-parent |
Date: |
Sat, 17 Dec 2022 18:34:06 -0500 (EST) |
branch: emacs-29
commit 1fc7535546c0ae42872e9c9d3aa6d6bfba849482
Author: Yuan Fu <casouri@gmail.com>
Commit: Yuan Fu <casouri@gmail.com>
Use cursor API in treesit-node-parent
This is the last part of the change that fixes bug#60054. The
previous change fixes it for searching functions, this fixes for
treesit-node-parent.
* src/treesit.c (Ftreesit_node_parent): Use the new cursor API.
---
src/treesit.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/treesit.c b/src/treesit.c
index fac99f6edd..849ebad267 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -1758,6 +1758,8 @@ If NODE is nil, return nil. */)
return build_string (string);
}
+static TSTreeCursor treesit_cursor_helper (TSNode, Lisp_Object);
+
DEFUN ("treesit-node-parent",
Ftreesit_node_parent, Streesit_node_parent, 1, 1, 0,
doc: /* Return the immediate parent of NODE.
@@ -1768,13 +1770,18 @@ Return nil if NODE has no parent. If NODE is nil,
return nil. */)
treesit_check_node (node);
treesit_initialize ();
- TSNode treesit_node = XTS_NODE (node)->node;
- TSNode parent = ts_node_parent (treesit_node);
-
- if (ts_node_is_null (parent))
- return Qnil;
+ Lisp_Object return_value = Qnil;
- return make_treesit_node (XTS_NODE (node)->parser, parent);
+ TSNode treesit_node = XTS_NODE (node)->node;
+ Lisp_Object parser = XTS_NODE (node)->parser;
+ TSTreeCursor cursor = treesit_cursor_helper (treesit_node, parser);
+ if (ts_tree_cursor_goto_parent (&cursor))
+ {
+ TSNode parent = ts_tree_cursor_current_node (&cursor);
+ return_value = make_treesit_node (parser, parent);
+ }
+ ts_tree_cursor_delete (&cursor);
+ return return_value;
}
DEFUN ("treesit-node-child",