如何使用Tree-sitter查询嵌入语言中的节点?
解决Tree-sitter查询嵌入语言节点的问题
你遇到的问题核心是:在主语言(Markdown)的查询语句中,无法直接引用嵌入语言(R)的节点类型,因为主查询的上下文只识别主语言的节点结构。
两种可行的解决方案:
1. 在主语言查询中通过节点路径定位嵌入语言的节点
直接在Markdown的查询文件里,先匹配到承载嵌入代码的节点,再深入到嵌入语言的节点结构中。针对你的场景,可用以下查询语句:
(fenced_code_block (info_string (language) @_lang (#eq? @_lang "r")) ; 可选:限定仅匹配R代码块 (code_fence_content (program (comment) @comment) ) )
如果不需要限定代码块语言,也可以简化为:
(code_fence_content (program (comment) @comment) )
2. 单独为嵌入语言编写查询文件
Tree-sitter会自动对注入的代码块应用对应语言的查询规则。你可以创建R语言的查询文件,在里面直接写:
(comment) @comment
这样所有注入的R代码块中的注释都会被正确匹配。
内容的提问来源于stack exchange,提问作者wurli
相关产品推荐
相关产品推荐

