класс RubyVM::AbstractSyntaxTree::Node
RubyVM::AbstractSyntaxTree::Node экземпляры создаются методами разбора в RubyVM::AbstractSyntaxTree.
Этот класс специфичен для MRI.
Методы публичного экземпляра
Исходный код
# File ast.rb, line 205 def all_tokens Primitive.ast_node_all_tokens end
Возвращает все токены для входного скрипта независимо от узла получателя. Возвращает nil , если keep_tokens не был включен при вызове метода разбора.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true)
root.all_tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
root.children[-1].all_tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
Исходный код
# File ast.rb, line 216 def children Primitive.ast_node_children end
Возвращает узлы AST под этим узлом. Каждый тип узла имеет разные потомки, в зависимости от того, какой это узел.
Возвращаемый массив может содержать другие узлы или nil.
Исходный код
# File ast.rb, line 148 def first_column Primitive.ast_node_first_column end
Номер столбца в исходном коде, с которого начался текст этого узла AST.
Исходный код
# File ast.rb, line 140 def first_lineno Primitive.ast_node_first_lineno end
Номер строки в исходном коде, с которого начался текст этого узла AST.
Исходный код
# File ast.rb, line 224 def inspect Primitive.ast_node_inspect end
Возвращает отладочную информацию об этом узле в виде строки.
Исходный код
# File ast.rb, line 164 def last_column Primitive.ast_node_last_column end
Номер столбца в исходном коде, на котором закончился текст этого узла AST.
Исходный код
# File ast.rb, line 156 def last_lineno Primitive.ast_node_last_lineno end
Номер строки в исходном коде, на котором закончился текст этого узла AST.
Исходный код
# File ast.rb, line 280 def locations Primitive.ast_node_locations end
Возвращает объекты расположения, связанные с узлом AST. Возвращаемый массив содержит RubyVM::AbstractSyntaxTree::Location.
Исходный код
# File ast.rb, line 235 def node_id Primitive.ast_node_node_id end
Возвращает внутренний node_id номер. Обратите внимание, что это API для внутреннего использования Ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
Исходный код
# File ast.rb, line 247 def script_lines Primitive.ast_node_script_lines end
Возвращает исходный код в виде массива строк.
Обратите внимание, что это API для внутреннего использования Ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
Исходный код
# File ast.rb, line 263
def source
lines = script_lines
if lines
lines = lines[first_lineno - 1 .. last_lineno - 1]
lines[-1] = lines[-1].byteslice(0...last_column)
lines[0] = lines[0].byteslice(first_column..-1)
lines.join
else
nil
end
end Возвращает фрагмент кода, соответствующий этому AST.
Обратите внимание, что это API для внутреннего использования Ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
Также обратите внимание, что этот API может возвращать неполный фрагмент кода, который не подлежит разбору; например, блок здесь документа, следующий за выражением, может быть пропущен.
Исходный код
# File ast.rb, line 184
def tokens
return nil unless all_tokens
all_tokens.each_with_object([]) do |token, a|
loc = token.last
if ([first_lineno, first_column] <=> [loc[0], loc[1]]) <= 0 &&
([last_lineno, last_column] <=> [loc[2], loc[3]]) >= 0
a << token
end
end
end Возвращает токены, соответствующие расположению узла. Возвращает nil , если keep_tokens не был включен при вызове метода разбора.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true)
root.tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
root.tokens.map{_1[2]}.join # => "x = 1 + 2"
Токен — это массив:
-
id
-
тип токена
-
текст исходного кода
-
расположение [
first_lineno,first_column,last_lineno,last_column]
Исходный код
# File ast.rb, line 132 def type Primitive.ast_node_type end
Возвращает тип этого узла в виде символа.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
root.type # => :SCOPE
lasgn = root.children[2]
lasgn.type # => :LASGN
call = lasgn.children[1]
call.type # => :OPCALL
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.