Actions
Feature #14833
openAdd RubyVM::AST::Node#pretty_print
Status:
Open
Assignee:
-
Target version:
-
Description
Abstract¶
This patch adds RubyVM::AST::Node#pretty_print
for pp
.
Background¶
RubyVM::AST::Node#inspect
does not print children, so I cannot understand structure of a ast by p
method.
For example:
$ ruby -e 'p RubyVM::AST.parse("if cond then foo; bar else hoge; fuga end")'
#<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:41): >
It is not understandable.
BTW parser gem prints children.
$ ruby -rparser/current -e 'p Parser::CurrentRuby.parse("if cond then foo; bar else hoge; fuga end")'
s(:if,
s(:send, nil, :cond),
s(:begin,
s(:send, nil, :foo),
s(:send, nil, :bar)),
s(:begin,
s(:send, nil, :hoge),
s(:send, nil, :fuga)))
Proposal¶
Add RubyVM::AST::Node#pretty_print
for pp
method and it displays children nodes.
$ ruby -e 'p RubyVM::AST.parse("if cond then foo; bar else hoge; fuga end")'
#<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:41): >
$ ruby -e 'pp RubyVM::AST.parse("if cond then foo; bar else hoge; fuga end")'
#<RubyVM::AST::Node(NODE_SCOPE(0) 1:0, 1:41
nil,
#<RubyVM::AST::Node(NODE_IF(2) 1:0, 1:41
#<RubyVM::AST::Node(NODE_VCALL(38) 1:3, 1:7 ): >,
#<RubyVM::AST::Node(NODE_BLOCK(1) 1:13, 1:21
#<RubyVM::AST::Node(NODE_VCALL(38) 1:13, 1:16 ): >,
#<RubyVM::AST::Node(NODE_VCALL(38) 1:18, 1:21 ): >): >,
#<RubyVM::AST::Node(NODE_BLOCK(1) 1:27, 1:37
#<RubyVM::AST::Node(NODE_VCALL(38) 1:27, 1:31 ): >,
#<RubyVM::AST::Node(NODE_VCALL(38) 1:33, 1:37 ): >): >): >): >
Implementation¶
See ast_node_pp.patch
from the attachment.
Note¶
Probably this format of pp
is not the best. We can improve the format. For example, maybe we can add braces for children node.
If you have any ideas, please tell me the ideas!
Files
Updated by shevegen (Robert A. Heiler) over 6 years ago
Yay! \o/
Pretty print all the things.
Actions
Like0
Like0