Spec-Zone.ru › Ruby 4.0
  1. RubyVM::
  2. AbstractSyntaxTree::
  3. Node

class RubyVM::AbstractSyntaxTree::Node

Родительский класс:
Object

Экземпляры RubyVM::AbstractSyntaxTree::Node создаются методами разбора в RubyVM::AbstractSyntaxTree.

Этот класс относится только к MRI.

Открытые методы экземпляра

all_tokens → array Показать исходный код
# 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]], ...]
children → array Показать исходный код
# File ast.rb, line 216
def children
  Primitive.ast_node_children
end

Возвращает узлы AST, расположенные под этим узлом. У каждого типа узла свои дочерние узлы — их состав зависит от типа узла.

Возвращённый массив может содержать другие узлы или nil.

first_column → integer Показать исходный код
# File ast.rb, line 148
def first_column
  Primitive.ast_node_first_column
end

Номер столбца в исходном коде, с которого начинается текст этого AST.

first_lineno → integer Показать исходный код
# File ast.rb, line 140
def first_lineno
  Primitive.ast_node_first_lineno
end

Номер строки в исходном коде, с которой начинается текст этого AST.

inspect → string Показать исходный код
# File ast.rb, line 224
def inspect
  Primitive.ast_node_inspect
end

Возвращает строку с отладочной информацией об этом узле.

last_column → integer Показать исходный код
# File ast.rb, line 164
def last_column
  Primitive.ast_node_last_column
end

Номер столбца в исходном коде, которым заканчивается текст этого AST.

last_lineno → integer Показать исходный код
# File ast.rb, line 156
def last_lineno
  Primitive.ast_node_last_lineno
end

Номер строки в исходном коде, которой заканчивается текст этого AST.

locations → array Показать исходный код
# File ast.rb, line 280
def locations
  Primitive.ast_node_locations
end

Возвращает объекты местоположения, связанные с узлом AST. Возвращённый массив содержит RubyVM::AbstractSyntaxTree::Location.

node_id → integer Показать исходный код
# File ast.rb, line 235
def node_id
  Primitive.ast_node_node_id
end

Возвращает внутренний номер node_id. Обратите внимание, что этот API предназначен для внутреннего использования в ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.

script_lines → array Показать исходный код
# File ast.rb, line 247
def script_lines
  Primitive.ast_node_script_lines
end

Возвращает исходный код в виде массива строк.

Обратите внимание, что этот API предназначен для внутреннего использования в ruby, отладки и исследований. Не используйте его для других целей. Совместимость не гарантируется.

source → string Показать исходный код
# 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 может возвращать неполный фрагмент кода, который не разбирается; например, here-документ после выражения может быть отброшен.

tokens → array Показать исходный код
# 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"

Токен — это массив, содержащий:

  • идентификатор

  • тип токена

  • текст исходного кода

  • местоположение [ first_lineno, first_column, last_lineno, last_column ]

type → symbol Показать исходный код
# 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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API