класс RubyVM::AbstractSyntaxTree::Node
RubyVM::AbstractSyntaxTree::Node экземпляры создаются методами разбора в RubyVM::AbstractSyntaxTree.
Этот класс специфичен для MRI.
Публичные методы экземпляров
# File ast.rb, line 131 def children Primitive.ast_node_children end
Возвращает узлы AST под этим узлом. Каждый тип узла имеет разные дочерние узлы, в зависимости от его типа.
Возвращаемый массив может содержать другие узлы или nil.
# File ast.rb, line 104 def first_column Primitive.ast_node_first_column end
Номер столбца в исходном коде, где начался текст этого узла AST.
# File ast.rb, line 96 def first_lineno Primitive.ast_node_first_lineno end
Номер строки в исходном коде, где начался текст этого узла AST.
# File ast.rb, line 139 def inspect Primitive.ast_node_inspect end
Возвращает отладочную информацию об этом узле в виде строки.
# File ast.rb, line 120 def last_column Primitive.ast_node_last_column end
Номер столбца в исходном коде, где закончился текст этого узла AST.
# File ast.rb, line 112 def last_lineno Primitive.ast_node_last_lineno end
Номер строки в исходном коде, где закончился текст этого узла AST.
# File ast.rb, line 150 def node_id Primitive.ast_node_node_id end
Возвращает внутренний номер node_id. Обратите внимание, что это API для внутреннего использования руби, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
# File lib/pp.rb, line 568
def pretty_print(q)
q.group(1, "(#{type}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") {
case type
when :SCOPE
pretty_print_children(q, %w"tbl args body")
when :ARGS
pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block])
when :DEFN
pretty_print_children(q, %w[mid body])
when :ARYPTN
pretty_print_children(q, %w[const pre rest post])
when :HSHPTN
pretty_print_children(q, %w[const kw kwrest])
else
pretty_print_children(q)
end
}
end # File lib/pp.rb, line 555
def pretty_print_children(q, names = [])
children.zip(names) do |c, n|
if n
q.breakable
q.text "#{n}:"
end
q.group(2) do
q.breakable
q.pp c
end
end
end # File ast.rb, line 162 def script_lines Primitive.ast_node_script_lines end
Возвращает исходный код в виде массива строк.
Обратите внимание, что это API для внутреннего использования руби, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
# File ast.rb, line 178
def source
lines = script_lines
if lines
lines = lines[first_lineno - 1 .. last_lineno - 1]
lines[-1] = lines[-1][0...last_column]
lines[0] = lines[0][first_column..-1]
lines.join
else
nil
end
end Возвращает фрагмент кода, соответствующий этому узлу AST.
Обратите внимание, что это API для внутреннего использования руби, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.
Также обратите внимание, что это API может вернуть неполный фрагмент кода, который не поддаётся парсингу; например, блок here document после выражения может быть удалён.
# File ast.rb, line 88 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–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.