treesitter 嵌套很深 child
treesitter get deeply nested child
我正在使用 treesitter 制作一个小脚本,它将提取 ORG 文件中的所有代码块,但前提是它们位于具有特定 属性 (:TANGLE:) 的标题下。
我能够进行此查询,该查询有效,但只找到紧邻 children 标题的代码块:
(section
(property_drawer
(property
name: (expr) @prop_name (#eq? @prop_name "TANGLE")
value: (value) @file
)
)
(body
(block
contents: (contents) @code
)
)
)
它适用于此组织文件:
* Headline
:PROPERTIES:
:TANGLE: file.lua
:END:
#+begin_src lua
print("test")
#+end_src
但这个不是,因为代码块不直接在“标题 1”内:
* Headline 1
:PROPERTIES:
:TANGLE: file.lua
:END:
** Headline 2
#+begin_src lua
print("test")
#+end_src
有没有办法使用 treesitter 查询来获取嵌套在标题内任意深度的节点?[=14=]
我找不到任何方法来做到这一点,所以最后,我决定递归地进行深入搜索。
这是 neovim 的脚本,所以我使用了这些函数:
tsnode:iter_children() -- used in a for loop
tsnode:type() -- Check the node type
ts_utils.get_node_text() -- To get the text content of a node
我希望这对其他人也有帮助。
我正在使用 treesitter 制作一个小脚本,它将提取 ORG 文件中的所有代码块,但前提是它们位于具有特定 属性 (:TANGLE:) 的标题下。
我能够进行此查询,该查询有效,但只找到紧邻 children 标题的代码块:
(section
(property_drawer
(property
name: (expr) @prop_name (#eq? @prop_name "TANGLE")
value: (value) @file
)
)
(body
(block
contents: (contents) @code
)
)
)
它适用于此组织文件:
* Headline
:PROPERTIES:
:TANGLE: file.lua
:END:
#+begin_src lua
print("test")
#+end_src
但这个不是,因为代码块不直接在“标题 1”内:
* Headline 1
:PROPERTIES:
:TANGLE: file.lua
:END:
** Headline 2
#+begin_src lua
print("test")
#+end_src
有没有办法使用 treesitter 查询来获取嵌套在标题内任意深度的节点?[=14=]
我找不到任何方法来做到这一点,所以最后,我决定递归地进行深入搜索。
这是 neovim 的脚本,所以我使用了这些函数:
tsnode:iter_children() -- used in a for loop
tsnode:type() -- Check the node type
ts_utils.get_node_text() -- To get the text content of a node
我希望这对其他人也有帮助。