1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Add RubyVM::AST#pretty_print

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-12-03 00:24:38 +00:00
parent b56e266d64
commit 87e1dd2982
2 changed files with 39 additions and 0 deletions

View file

@ -514,6 +514,36 @@ class MatchData # :nodoc:
end
end
class RubyVM::AbstractSyntaxTree::Node
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
def pretty_print(q)
q.group(1, "(#{type.sub(/\ANODE_/,'')}@#{first_lineno}:#{first_column}-#{last_lineno}:#{last_column}", ")") {
case type
when "NODE_SCOPE"
pretty_print_children(q, %w"tbl args body")
when "NODE_ARGS"
pretty_print_children(q, %w[pre_num pre_init opt first_post post_num post_init rest kw kwrest block])
when "NODE_DEFN"
pretty_print_children(q, %w[mid body])
else
pretty_print_children(q)
end
}
end
end
class Object < BasicObject # :nodoc:
include PP::ObjectMixin
end

View file

@ -194,4 +194,13 @@ class PPFileStatTest < Test::Unit::TestCase
end
end
class PPAbstractSyntaxTree < Test::Unit::TestCase
AST = RubyVM::AbstractSyntaxTree
def test_literal
ast = AST.parse("1")
expected = "(SCOPE@1:0-1:1 tbl: [] args: nil body: (LIT@1:0-1:1 1))"
assert_equal(expected, PP.singleline_pp(ast, ''.dup))
end
end
end