модуль RubyVM::AbstractSyntaxTree
AbstractSyntaxTree предоставляет методы для разбора кода Ruby в деревья абстрактного синтаксиса. Узлы в дереве являются экземплярами RubyVM::AbstractSyntaxTree::Node.
Этот модуль специфичен для MRI, поскольку он раскрывает детали реализации дерева абстрактного синтаксиса MRI.
Этот модуль экспериментальный, и его API нестабилен, поэтому он может измениться без предварительного уведомления. Например, порядок дочерних узлов не гарантируется, количество дочерних узлов может измениться, нет способа получить доступ к дочерним узлам по имени и т. д.
Если вы ищете стабильный API или API, работающий в нескольких реализациях Ruby, рассмотрите использование драгоценного камня parser или Ripper. Если вы хотите сделать RubyVM::AbstractSyntaxTree стабильным, пожалуйста, присоединяйтесь к обсуждению на bugs.ruby-lang.org/issues/14844.
Общедоступные методы класса
# File ast.rb, line 68 def self.of body Primitive.ast_s_of body 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>
# File ast.rb, line 34 def self.parse string Primitive.ast_s_parse string end
Разбирает заданную строку в дерево абстрактного синтаксиса, возвращая корневой узел этого дерева.
SyntaxError генерируется, если заданная строка имеет неверный синтаксис.
RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:9>
# File ast.rb, line 49 def self.parse_file pathname Primitive.ast_s_parse_file pathname 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–2020 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.