节点类型
这是一个由 AST 解析的节点类型以及与其关联的方法和信息的列表。
RuboCop::AST::Node 通过为某些节点类型提供单独的类来定义一些其他方法。您可以在 API 文档 中查看方法定义。
有关完整信息,请参阅 解析器文档。此页面将作为该页面的快速索引,该页面包含更多示例和对不同位置部分的更完整解释。您还可以通过运行 ruby-parse --legacy -L -e "ruby(code: 'here')" 来查看自己的完整 AST。
在描述中会提到一些节点的“元类型”。
- 
表达式节点:任何返回值的表达式 - 变量( lvar、ivar、cvar等)、send或csend、const、self、任何字面量值(int、str、nil等)或控制语句,如if、case、begin等。
- 
赋值节点:任何赋值的节点。 lvasgn、ivasgn、cvasgn、gvasgn、send(例如self.foo = 5)或csend。
- 
主体语句:这基本上可以是任何节点,除了必须嵌套的节点(如 args或mlhs)。通常它作为可以包含任意代码的节点(如def或class)的子节点出现。这将始终是一个单个节点,它要么是表达式,要么是begin节点,要么是nil。
位置信息
您可以通过在节点上调用 .loc 来获取源映射的不同部分。每个节点都有一个 expression 值,它通常代表整个节点,但其他节点有额外的字段。
以下字段在与源代码中的节点相关时给出
| 
 | 描述 | 
| 
 | 在 rescue 子句( | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 用于  | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | 
 | 
| 
 | heredoc 格式字符串的主体。 | 
| 
 | heredoc 语句的结束。 | 
| 
 | 
 | 
| 
 | 任何基于文本的关键字,如  | 
| 
 | 在定义某些内容时使用(如  | 
| 
 | 任何代表运算符的符号,如  | 
| 
 | 
 | 
| 
 | 用于方法调用 ( | 
节点类型
| 类型 | 描述 | 子节点 | 示例 | 节点类 | 
|---|---|---|---|---|
| 
 | 方法别名 | 两个子节点 - 都是  | 
 | |
| 
 | 与运算符 | 两个子节点都是表示操作数的表达式节点。 | 
 | |
| 
 | 与赋值 (将接收者与参数进行与运算,并将结果赋值回接收者)。 | 第一个子节点必须是赋值节点,第二个子节点是表达式节点。 | 
 | |
| 
 | 必需的位置参数。必须位于  | 一个子节点 - 一个符号,代表参数名称。 | 
 | |
| 
 | 参数列表。必须位于  | 子节点必须是  | 
 | |
| 
 | 数组字面量。 | 数组中的值,包括可能的  | 
 | |
| 
 | 正则表达式反向引用,例如 $&。 | 一个子节点 (符号) 代表引用名称,例如  | 
 | 
 | 
| 
 | 块执行。 | 三个子节点。第一个子节点是接收者 **或**  | 
 | |
| 
 | 在将块作为参数传递时使用。 | 一个子节点,一个表达式节点,代表要传递的块。 | 
 | 
 | 
| 
 | 对函数定义中块参数的引用。必须位于  | 一个子节点 - 一个符号,代表参数名称。 | 
 | |
| 
 | break 关键字 | 一个子节点,包含一个表达式节点,用于传递要通过 break 传递的结果。 | 
 | |
| 
 | Case 语句。 | 第一个子节点是用于检查条件的表达式节点。最后一个子节点是用于“else”条件的表达式节点。所有中间节点都是 | 
 | |
| 
 | 常量赋值 | 三个子节点:父对象(表达式、 | 
 | |
| 
 | 表示顶级模块常量(即常量名称之前的'::')。仅在 | 无 | 
 | 
 | 
| 
 | 复数字面量 | 一个子节点,即复数值 | 
 | 
 | 
| 
 | 常量引用。 | 两个子节点,父对象(表达式、 | 
 | 
 | 
| 
 | 类定义 | 三个子节点。第一个子节点是用于类名称的 | 
 | |
| 
 | 空安全方法调用,即使用 | 第一个子节点是接收者节点(例如 | 
 | |
| 
 | 类变量访问 | 一个子节点,即变量名称 | 
 | 
 | 
| 
 | 类变量赋值 | 两个子节点:变量名称 | 
 | |
| 
 | 实例方法定义(完整格式) | 三个子节点。第一个子节点是方法的名称(符号);第二个子节点是 | 
 | |
| 
 | 
 | 一个子节点,一个表达式。 | 
 | 
 | 
| 
 | 单例方法定义(完整格式) - 即在单个对象上定义方法。 | 四个子节点。第一个子节点是接收者;第二个子节点是方法名称(符号);第三个子节点是  | 
 | |
| 
 | 插值字符串字面量。 | 子节点被分成  | 
 | |
| 
 | 插值符号字面量。 | 子节点被分成  | 
 | 
 | 
| 
 | 包含  | 最后一个子节点是  | 
 | |
| 
 | 排他范围字面量 | 两个子节点,开始和结束节点(包括  | 
 | |
| 
 | 假字面量 | 无 | 
 | 
 | 
| 
 | 浮点字面量 | 一个子节点,Float 值 | 
 | |
| 
 | for..in 循环条件 | 三个子节点。第一个子节点是  | 
 | |
| 
 | 转发参数,用于 Ruby 3.0(当  | 无 | 
 | |
| 
 | 转发参数列表,用于 Ruby 2.7(当  | 无 | 
 | |
| 
 | 将参数转发到方法调用 | 无 | 
 | 
 | 
| 
 | 将位置参数转发到方法调用 | 无 | 
 | 
 | 
| 
 | 将关键字参数转发到方法调用 | 无 | 
 | 
 | 
| 
 | 全局变量访问 | 一个子节点,变量名作为符号  | 
 | 
 | 
| 
 | 全局变量赋值 | 两个子节点,变量名  | 
 | |
| 
 | 哈希字面量。 | 
 | 
 | |
| 
 | If、else、elif、unless 和三元条件 | 三个子节点。第一个子节点是表示条件的表达式节点;第二个子节点是表示真条件的表达式节点;第三个子节点是表示假条件的表达式节点。 | 
 | |
| 
 | 整数字面量 | 1,整数的值 | 
 | |
| 
 | 实例变量访问 | 一个子节点,变量名  | 
 | 
 | 
| 
 | 实例变量赋值 | 两个子节点,变量名  | 
 | |
| 
 | 包含范围字面量。 | 两个子节点,开始和结束节点(包括  | 
 | |
| 
 | 必需关键字参数。必须位于  | 一个子节点 - 一个符号,代表参数名称。 | 
 | |
| 
 | 显式  | 子节点是主体语句。 | 
 | 
 | 
| 
 | 函数定义中带有 nil 的双星号,用于指定函数不接受关键字参数。必须位于  | 无 | 
 | 
 | 
| 
 | 可选关键字参数。必须位于  | 两个子节点 - 一个符号,表示参数名称,以及一个表示值的表达式节点。 | 
 | |
| 
 | 在函数调用中使用双星号表示关键字参数(与函数定义中的用法相反)。 | 一个子节点,一个表达式。 | 
 | |
| 
 | 在函数定义中使用双星号表示关键字参数(与函数调用中的用法相反)。必须放在  | 只有一个子节点 - 一个符号,表示参数名称(如果给出了名称)。如果没有给出名称,则没有子节点。 | 
 | |
| 
 | 访问局部变量 | 只有一个子节点,即变量名称 | 
 | 
 | 
| 
 | 局部变量赋值 | 两个子节点:变量名称(符号)和表达式。 | 
 | |
| 
 | 多重赋值。 | 第一组子节点都是  | 
 | 
 | 
| 
 | 多重左值。用于  | 子节点必须都是赋值节点。表示多重赋值的左侧(示例中的  | 
 | 
 | 
| 
 | 模块定义 | 两个子节点。第一个子节点是模块名称的  | 
 | |
| 
 | next 关键字 | 零个或一个子节点,包含一个表达式节点,用于将结果传递给下一个 | 
 | 
 | 
| 
 | 空文字 | 无 | 
 | 
 | 
| 
 | 正则表达式捕获组($1、$2 等) | 只有一个子节点:捕获名称,例如  | 
 | 
 | 
| 
 | 块,其中包含编号参数( | 三个子节点。第一个子节点是  | 
 | |
| 
 | 运算符赋值 - 执行运算并赋值。 | 三个子节点。第一个子节点必须是赋值节点,第二个子节点是运算符(例如  | 
 | |
| 
 | 可选位置参数。必须放在  | 一个子节点 - 一个符号,代表参数名称。 | 
 | |
| 
 | 或运算符 | 两个子节点都是表示操作数的表达式节点。 | 
 | |
| 
 | 或赋值(将接收者与参数进行或运算,并将结果赋值回接收者)。 | 两个子节点。第一个子节点必须是赋值节点,第二个子节点是表达式节点。 | 
 | |
| 
 | 哈希中的一个条目。 | 两个子节点,键节点和值节点。 | 
 | |
| 
 | 有理数字面量 | 一个子节点,有理数值 | 
 | 
 | 
| 
 | Redo 命令 | 无 | 
 | 
 | 
| 
 | 正则表达式字面量。 | 子节点被分成 | 
 | |
| 
 | 正则表达式选项,出现在正则表达式字面量之后(例如中的“im”)。 | 表示选项的符号列表(例如 | 
 | 
 | 
| 
 | 异常救援。始终出现在 | 三个子节点。第一个子节点是 | 
 | |
| 
 | 救援语句。可以是“顶级”的,也可以嵌套在 | 第一个节点是主体语句。最后一个子节点是“else”主体语句,或 | 
 | |
| 
 | 位置参数展开。必须出现在 | 一个子节点 - 一个符号,表示参数名称(如果给出)。如果没有给出名称,则没有子节点。 | 
 | |
| 
 | 返回语句 | 零个或一个子节点,一个表达式节点,用于要返回的值。 | 
 | |
| 
 | 单例类声明。 | 两个子节点。第一个子节点是正在打开的类的表达式(例如 | 
 | |
| 
 | 访问 self | 无 | 
 | 
 | 
| 
 | 非安全方法调用(即顶级或使用点) | 第一个子节点是接收者节点(例如 | 
 | |
| 
 | 影子参数,也称为块局部变量。必须位于  | 一个子节点 - 一个符号,代表参数名称。 | 
 | |
| 
 | 数组或函数参数 * 运算符 | 一个子节点,一个表达式。 | 
 | 
 | 
| 
 | 非插值字符串字面量。heredoc 版本的工作方式与常规版本完全不同,位置信息也完全独立。 | 一个子节点,即字符串内容。 | 
 | |
| 
 | 带有参数和/或括号的超类方法调用。 | 子节点是表示参数的表达式节点。 | 
 | |
| 
 | 非插值符号 | 一个子节点,即符号内容。 | 
 | |
| 
 | 真字面量 | 无 | 
 | 
 | 
| 
 | 方法取消定义 | 一个  | 
 | 
 | 
| 
 | 条件先出现的负循环。 | 两个子节点。第一个子节点是条件的表达式节点,第二个子节点是主体语句。 | 
 | |
| 
 | 条件最后出现的负循环。 | 两个子节点。第一个子节点是条件的表达式节点,第二个子节点是主体语句。 | 
 | |
| 
 | 案例匹配。通常嵌套在  | 两个子节点。第一个子节点是条件的正则表达式、表达式节点或  | 
 | |
| 
 | 条件先出现的循环。 | 两个子节点。第一个子节点是条件的表达式节点,第二个子节点是主体语句。 | 
 | |
| 
 | 条件最后出现的循环。 | 两个子节点。第一个子节点是条件的表达式节点,第二个子节点是主体语句。 | 
 | |
| 
 | 执行字符串(反引号)。heredoc 版本的处理方式与常规版本完全不同。 | 子节点被拆分为  | 
 | |
| 
 | 向块 yield。 | 子节点是表示参数的表达式节点。 | 
 | |
| 
 | 没有参数或括号的超类方法调用。 | 无 | 
 |