Module: RubyVM::AbstractSyntaxTree
Overview
AbstractSyntaxTree
provides methods to parse Ruby code into abstract syntax trees. The nodes in the tree are instances of Node
.
This class is MRI specific as it exposes implementation details of the MRI abstract syntax tree.
This class is experimental and its API is not stable, therefore it might change without notice. As examples, the order of children nodes is not guaranteed, the number of children nodes might change, there is no way to access children nodes by name, etc.
If you are looking for a stable API or an API working under multiple Ruby implementations, consider using the parser gem or Ripper. If you would like to make AbstractSyntaxTree
stable, please join the discussion at bugs.ruby-lang.org/issues/14844.
Class Method Summary
-
.of(proc) ⇒ AbstractSyntaxTree
Returns AST nodes of the given proc or method.
-
.parse(string) ⇒ AbstractSyntaxTree
Parses the given string into an abstract syntax tree, returning the root node of that tree.
-
.parse_file(pathname) ⇒ AbstractSyntaxTree
Reads the file from pathname, then parses it like .parse, returning the root node of the abstract syntax tree.
Class Method Details
.of(proc) ⇒ AbstractSyntaxTree
.of(method) ⇒ AbstractSyntaxTree
AbstractSyntaxTree
.of(method) ⇒ AbstractSyntaxTree
# File 'ast.rb', line 68
def self.of body __builtin_ast_s_of body end
.parse(string) ⇒ AbstractSyntaxTree
Parses the given string into an abstract syntax tree, returning the root node of that tree.
::SyntaxError
is raised if the given string is invalid syntax.
RubyVM::AbstractSyntaxTree.parse("x = 1 + 2")
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-1:9>
# File 'ast.rb', line 34
def self.parse string __builtin_ast_s_parse string end
.parse_file(pathname) ⇒ AbstractSyntaxTree
Reads the file from pathname, then parses it like .parse, returning the root node of the abstract syntax tree.
::SyntaxError
is raised if pathname’s contents are not valid Ruby syntax.
RubyVM::AbstractSyntaxTree.parse_file("my-app/app.rb")
# => #<RubyVM::AbstractSyntaxTree::Node:SCOPE@1:0-31:3>
# File 'ast.rb', line 49
def self.parse_file pathname __builtin_ast_s_parse_file pathname end