Project

General

Profile

Actions

Feature #14833

open

Add RubyVM::AST::Node#pretty_print

Added by pocke (Masataka Kuwabara) almost 6 years ago. Updated almost 6 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:87445]

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

ast_node_pp.patch (2.08 KB) ast_node_pp.patch pocke (Masataka Kuwabara), 06/07/2018 02:44 PM

Updated by shevegen (Robert A. Heiler) almost 6 years ago

Yay! \o/

Pretty print all the things.

Actions

Also available in: Atom PDF

Like0
Like0