Spec-Zone.ru › Ruby 3.1

модуль RubyVM::AbstractSyntaxTree

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

Этот модуль специфичен для MRI, так как он раскрывает детали реализации абстрактного синтаксического дерева MRI.

Этот модуль экспериментальный, и его API не стабилен, поэтому он может измениться без предварительного уведомления. Например, порядок узлов-потомков не гарантируется, количество узлов-потомков может измениться, нет способа получить доступ к узлам-потомкам по имени и т. д.

Если вы ищете стабильный API или API, работающий в нескольких реализациях Ruby, рассмотрите использование драгоценности parser или Ripper. Если вы хотите сделать RubyVM::AbstractSyntaxTree стабильным, пожалуйста, присоединяйтесь к обсуждению на bugs.ruby-lang.org/issues/14844.

Публичные методы класса

RubyVM::AbstractSyntaxTree.of(proc) → RubyVM::AbstractSyntaxTree::Node Показать исходный код
RubyVM::AbstractSyntaxTree.of(method) → RubyVM::AbstractSyntaxTree::Node
# File ast.rb, line 66
def self.of body, keep_script_lines: false
  Primitive.ast_s_of body, keep_script_lines
end

Возвращает узлы AST заданного proc или method.

RubyVM::AbstractSyntaxTree.of(proc {1 + 2})
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:35-1:42>

def hello
  puts "hello, world"
end

RubyVM::AbstractSyntaxTree.of(method(:hello))
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-3:3>
RubyVM::AbstractSyntaxTree.parse(string) → RubyVM::AbstractSyntaxTree::Node Показать исходный код
# File ast.rb, line 32
def self.parse string, keep_script_lines: false
  Primitive.ast_s_parse string, keep_script_lines
end

Разбирает заданную строку в абстрактное синтаксическое дерево, возвращая корневой узел этого дерева.

SyntaxError генерируется, если заданная строка содержит недопустимый синтаксис.

RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:9>
RubyVM::AbstractSyntaxTree.parse_file(pathname) → RubyVM::AbstractSyntaxTree::Node Показать исходный код
# File ast.rb, line 47
def self.parse_file pathname, keep_script_lines: false
  Primitive.ast_s_parse_file pathname, keep_script_lines
end

Читает файл из pathname, а затем разбирает его как ::parse, возвращая корневой узел абстрактного синтаксического дерева.

SyntaxError генерируется, если содержимое pathname не является допустимым синтаксисом Ruby.

RubyVM::AbstractSyntaxTree.parse_file("my-app/app.rb")
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-31:3>

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