ruby-syntax-tree / syntax_tree

Interact with the Ruby syntax tree

Home Page:https://ruby-syntax-tree.github.io/syntax_tree/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

stree match command crashed by "undefined method `pretty_print' for nil:NilClass"

bongole opened this issue · comments

When I run the following command with stree version 6.0.1, it crashes with below error:

$ echo 'p("a")' | stree _6.0.1_ match

undefined method `pretty_print' for nil:NilClass
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:24:in `visit'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:48:in `block in field'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:979:in `block in nest'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:979:in `nest'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:45:in `field'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/field_visitor.rb:228:in `block in visit_call'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:67:in `block in node'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:67:in `node'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/field_visitor.rb:227:in `visit_call'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/node.rb:2960:in `accept'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/basic_visitor.rb:106:in `visit'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:16:in `visit'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:58:in `block (3 levels) in list'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:767:in `block in seplist'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:759:in `each'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:759:in `seplist'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:58:in `block (2 levels) in list'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:958:in `block in indent'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:958:in `indent'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:56:in `block in list'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:859:in `block in group'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:855:in `group'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:53:in `list'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/field_visitor.rb:797:in `block in visit_statements'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:67:in `block in node'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:67:in `node'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/field_visitor.rb:796:in `visit_statements'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/node.rb:9911:in `accept'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/basic_visitor.rb:106:in `visit'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:16:in `visit'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:48:in `block in field'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:979:in `block in nest'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:979:in `nest'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:45:in `field'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/field_visitor.rb:659:in `block in visit_program'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:67:in `block in node'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:1006:in `with_target'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/match_visitor.rb:67:in `node'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/field_visitor.rb:658:in `visit_program'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/node.rb:8598:in `accept'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/node.rb:150:in `block in construct_keys'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/prettier_print-1.2.0/lib/prettier_print.rb:385:in `format'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/node.rb:150:in `construct_keys'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/cli.rb:251:in `run'
/home/bongole/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/syntax_tree-6.0.1/lib/syntax_tree/cli.rb:580:in `block (2 levels) in process_queue'

It worked fine with stree version 5.3.0.

$ echo 'p("a")' | stree _5.3.0_ match

SyntaxTree::Program[
  statements: SyntaxTree::Statements[
    body: [
      SyntaxTree::CallNode[
        receiver: nil,
        operator: nil,
        message: SyntaxTree::Ident[value: "p"],
        arguments: SyntaxTree::ArgParen[
          arguments: SyntaxTree::Args[
            parts: [
              SyntaxTree::StringLiteral[
                parts: [SyntaxTree::TStringContent[value: "a"]]
              ]
            ]
          ]
        ]
      ]
    ]
  ]
]

Thanks for the report @bongole. I didn't realize that requiring pp had so many side effects.

For now you can RUBYOPT="-rpp" be stree match -e 'p("a")' and it should work as normal until the next release.