节点类型
这是一个由 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。 |
子节点是表示参数的表达式节点。 |
|
|
|
没有参数或括号的超类方法调用。 |
无 |
|