Spec-Zone.ru › Ruby 3.1

класс RubyVM::AbstractSyntaxTree::Node

Родитель:
Объект

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

Этот класс специфичен для MRI.

Публичные методы экземпляров

children → массив Показать исходный код
# File ast.rb, line 131
def children
  Primitive.ast_node_children
end

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pretty_print(q) Показать исходный код
# 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
pretty_print_children(q, names = []) Показать исходный код
# 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
script_lines → массив Показать исходный код
# File ast.rb, line 162
def script_lines
  Primitive.ast_node_script_lines
end

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

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

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

type → символ Показать исходный код
# 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.

Spec-Zone.ru

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