You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在tree-sitter查询语法中使用or逻辑?查询类成员遇阻

Tree-sitter 查询类属性与方法的OR逻辑修正

你的查询失效核心是括号嵌套和语法树层级不匹配,Tree-sitter的|运算符要求备选节点处于同一匹配层级,同时需要贴合目标语言的语法树结构。

修正后的查询语句(以C#语法树为例)

如果目标语言的类体元素被class_body_element包裹(比如C#的Tree-sitter语法定义),正确写法如下:

(class_declaration 
  name: (type_identifier) @class-name
  body: (class_body
    (class_body_element
      ((public_field_definition 
          name: (property_identifier) @property-name)
       | (method_definition 
          name: (property_identifier) @method-name)))))

更通用的简化写法

如果public_field_definition和method_definition是class_body的直接子节点,可简化为:

(class_declaration 
  name: (type_identifier) @class-name
  body: (class_body
    (public_field_definition 
      name: (property_identifier) @property-name)
    | (method_definition 
      name: (property_identifier) @method-name)))

关键说明

  • Tree-sitter的OR逻辑通过|分隔同一层级的节点模式实现,多余的嵌套括号会破坏匹配层级。
  • 必须贴合目标语言的语法树结构:先通过tree-sitter parse命令查看语法树结构,确认class_body的子节点类型,再调整查询的层级匹配。

内容的提问来源于stack exchange,提问作者qg_java_17137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:21:08