From 87e1dd2982dd472de557f62468d77211c8a71bff Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 3 Dec 2018 00:24:38 +0000 Subject: Add RubyVM::AST#pretty_print git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/pp.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'lib/pp.rb') diff --git a/lib/pp.rb b/lib/pp.rb index 85401c8aa6..bb504bc1b4 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -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 -- cgit v1.2.3