diff options
| author | Yuan Fu | 2022-12-17 15:14:02 -0800 |
|---|---|---|
| committer | Yuan Fu | 2022-12-17 15:33:54 -0800 |
| commit | 1fc7535546c0ae42872e9c9d3aa6d6bfba849482 (patch) | |
| tree | 12c917c534f38f4df62060ccb5a0d0f2070f8b06 /src | |
| parent | 5f0286c0afa9811e8042911b738a452c1e632c9d (diff) | |
| download | emacs-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.c | 19 |
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 | ||
| 1761 | static TSTreeCursor treesit_cursor_helper (TSNode, Lisp_Object); | ||
| 1762 | |||
| 1761 | DEFUN ("treesit-node-parent", | 1763 | DEFUN ("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 | ||
| 1780 | DEFUN ("treesit-node-child", | 1787 | DEFUN ("treesit-node-child", |