RubyVM::AbstractSyntaxTree::Node
instances are created by parse methods in RubyVM::AbstractSyntaxTree
.
This class is MRI specific.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 206
def all_tokens
Primitive.ast_node_all_tokens
end
Returns all tokens for the input script regardless the receiver node. Returns nil
if keep_tokens
is not enabled when parse method is called.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true) root.all_tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...] root.children[-1].all_tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...]
# File tmp/rubies/ruby-3.3.0/ast.rb, line 217
def children
Primitive.ast_node_children
end
Returns AST nodes under this one. Each kind of node has different children, depending on what kind of node it is.
The returned array may contain other nodes or nil
.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 149
def first_column
Primitive.ast_node_first_column
end
The column number in the source code where this AST’s text began.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 141
def first_lineno
Primitive.ast_node_first_lineno
end
The line number in the source code where this AST’s text began.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 225
def inspect
Primitive.ast_node_inspect
end
Returns debugging information about this node as a string.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 165
def last_column
Primitive.ast_node_last_column
end
The column number in the source code where this AST’s text ended.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 157
def last_lineno
Primitive.ast_node_last_lineno
end
The line number in the source code where this AST’s text ended.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 236
def node_id
Primitive.ast_node_node_id
end
Returns an internal node_id
number. Note that this is an API for ruby internal use, debugging, and research. Do not use this for any other purpose. The compatibility is not guaranteed.
# File tmp/rubies/ruby-3.3.0/lib/pp.rb, line 592
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
# File tmp/rubies/ruby-3.3.0/lib/pp.rb, line 579
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
# File tmp/rubies/ruby-3.3.0/ast.rb, line 248
def script_lines
Primitive.ast_node_script_lines
end
Returns the original source code as an array of lines.
Note that this is an API for ruby internal use, debugging, and research. Do not use this for any other purpose. The compatibility is not guaranteed.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 264
def source
lines = script_lines
if lines
lines = lines[first_lineno - 1 .. last_lineno - 1]
lines[-1] = lines[-1].byteslice(0...last_column)
lines[0] = lines[0].byteslice(first_column..-1)
lines.join
else
nil
end
end
Returns the code fragment that corresponds to this AST.
Note that this is an API for ruby internal use, debugging, and research. Do not use this for any other purpose. The compatibility is not guaranteed.
Also note that this API may return an incomplete code fragment that does not parse; for example, a here document following an expression may be dropped.
# File tmp/rubies/ruby-3.3.0/ast.rb, line 185
def tokens
return nil unless all_tokens
all_tokens.each_with_object([]) do |token, a|
loc = token.last
if ([first_lineno, first_column] <=> [loc[0], loc[1]]) <= 0 &&
([last_lineno, last_column] <=> [loc[2], loc[3]]) >= 0
a << token
end
end
end
Returns tokens corresponding to the location of the node. Returns nil
if keep_tokens
is not enabled when parse method is called.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2", keep_tokens: true) root.tokens # => [[0, :tIDENTIFIER, "x", [1, 0, 1, 1]], [1, :tSP, " ", [1, 1, 1, 2]], ...] root.tokens.map{_1[2]}.join # => "x = 1 + 2"
Token is an array of:
-
id
-
token type
-
source code text
-
location [
first_lineno
,first_column
,last_lineno
,last_column
]
# File tmp/rubies/ruby-3.3.0/ast.rb, line 133
def type
Primitive.ast_node_type
end
Returns the type of this node as a symbol.
root = RubyVM::AbstractSyntaxTree.parse("x = 1 + 2") root.type # => :SCOPE lasgn = root.children[2] lasgn.type # => :LASGN call = lasgn.children[1] call.type # => :OPCALL