stree match command crashed by "undefined method `pretty_print' for nil:NilClass"
bongole opened this issue · comments
Hirohisa Mitsuishi commented
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"]]
]
]
]
]
]
]
]
]
Kevin Newton commented
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.