aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorYuan Fu2022-12-17 15:14:02 -0800
committerYuan Fu2022-12-17 15:33:54 -0800
commit1fc7535546c0ae42872e9c9d3aa6d6bfba849482 (patch)
tree12c917c534f38f4df62060ccb5a0d0f2070f8b06 /src
parent5f0286c0afa9811e8042911b738a452c1e632c9d (diff)
downloademacs-1fc7535546c0ae42872e9c9d3aa6d6bfba849482.tar.gz
emacs-1fc7535546c0ae42872e9c9d3aa6d6bfba849482.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/treesit.c19
1 files changed, 13 insertions, 6 deletions
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. */)
1758 return build_string (string); 1758 return build_string (string);
1759} 1759}
1760 1760
1761static TSTreeCursor treesit_cursor_helper (TSNode, Lisp_Object);
1762
1761DEFUN ("treesit-node-parent", 1763DEFUN ("treesit-node-parent",
1762 Ftreesit_node_parent, Streesit_node_parent, 1, 1, 0, 1764 Ftreesit_node_parent, Streesit_node_parent, 1, 1, 0,
1763 doc: /* Return the immediate parent of NODE. 1765 doc: /* Return the immediate parent of NODE.
@@ -1768,13 +1770,18 @@ Return nil if NODE has no parent. If NODE is nil, return nil. */)
1768 treesit_check_node (node); 1770 treesit_check_node (node);
1769 treesit_initialize (); 1771 treesit_initialize ();
1770 1772
1771 TSNode treesit_node = XTS_NODE (node)->node; 1773 Lisp_Object return_value = Qnil;
1772 TSNode parent = ts_node_parent (treesit_node);
1773
1774 if (ts_node_is_null (parent))
1775 return Qnil;
1776 1774
1777 return make_treesit_node (XTS_NODE (node)->parser, parent); 1775 TSNode treesit_node = XTS_NODE (node)->node;
1776 Lisp_Object parser = XTS_NODE (node)->parser;
1777 TSTreeCursor cursor = treesit_cursor_helper (treesit_node, parser);
1778 if (ts_tree_cursor_goto_parent (&cursor))
1779 {
1780 TSNode parent = ts_tree_cursor_current_node (&cursor);
1781 return_value = make_treesit_node (parser, parent);
1782 }
1783 ts_tree_cursor_delete (&cursor);
1784 return return_value;
1778} 1785}
1779 1786
1780DEFUN ("treesit-node-child", 1787DEFUN ("treesit-node-child",