From: Yuan Fu Date: Sat, 17 Dec 2022 23:14:02 +0000 (-0800) Subject: Use cursor API in treesit-node-parent X-Git-Tag: emacs-29.0.90~1094 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=1fc7535546c0ae42872e9c9d3aa6d6bfba849482;p=emacs.git 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. --- diff --git a/src/treesit.c b/src/treesit.c index fac99f6edd5..849ebad267d 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",