October 2, 2018
This blog is part of our Ruby 2.6 series.
Ruby 2.6 added RubyVM::AST to generate the
Abstract Syntax Tree of
code. Please note, this feature is experimental and under active development.
As of now, RubyVM::AST supports two methods: parse and parse_file.
parse method takes a string as a parameter and returns the root node of the
tree in the form of the object, RubyVM::AST::Node (Link is not available).
parse_file method takes the file name as a parameter and returns the root node
of the tree in the form of the object,
RubyVM::AST::Node.
irb> RubyVM::AST.parse("(1..100).select { |num| num % 5 == 0 }")
=> #<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:38): >
irb> RubyVM::AST.parse_file("/Users/amit/app.rb")
=> #<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:38): >
RubyVM::AST::Node
has seven public instance methods - children, first_column, first_lineno,
inspect, last_column, last_lineno and type.
irb> ast_node = RubyVM::AST.parse("(1..100).select { |num| num % 5 == 0 }")
=> #<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:38): >
irb> ast_node.children
=> [nil, #<RubyVM::AST::Node(NODE_ITER(9) 1:0, 1:38): >]
irb> ast_node.first_column
=> 0
irb> ast_node.first_lineno
=> 1
irb> ast_node.inspect
=> "#<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:38): >"
irb> ast_node.last_column
=> 38
irb> ast_node.last_lineno
=> 1
irb> ast_node.type
=> "NODE_SCOPE"
This module will majorly help in building a static code analyzer and formatter.
If this blog was helpful, check out our full blog archive.