Project

General

Profile

Bug #19861

Updated by thyresias (Thierry Lambert) over 1 year ago

```ruby 
 require 'ripper' 

 ```ruby 
 class BasicParser < Ripper 
   EVENTS.each do |event| 
     module_eval(<<~RUBY, __FILE__, __LINE__ + 1) 
       def on_#{event}(*args) 
         puts "#{event}(\#{args.inspect})" 
         args.unshift :#{event} 
         args 
       end 
     RUBY 
   end 
 end 

 p = BasicParser.new(<<~RUBY) 
   <<~EOT 
     foo 
 RUBY 
 p.parse 
 p error: p.error? 
 # in stdout: 
 # heredoc_beg(["<<~EOT"]) 
 # string_content([]) 
 # tstring_content(["    foo\n"]) 
 # string_add([[:string_content], [:tstring_content, "    foo\n"]]) 
 # heredoc_dedent([[:string_add, [:string_content], [:tstring_content, "    foo\n"]], 2]) 
 # string_literal([[:string_add, [:string_content], [:tstring_content, "    foo\n"]]]) 
 # nl(["\n"]) 
 # stmts_new([]) 
 # stmts_add([[:stmts_new], [:string_literal, [:string_add, [:string_content], [:tstring_content, "    foo\n"]]]]) 
 # program([[:stmts_add, [:stmts_new], [:string_literal, [:string_add, [:string_content], [:tstring_content, "    foo\n"]]]]]) 
 # {:error=>true} 
 ``` 

 I would have expected one of the _error events to fire, since `p.error?` returns `true`.

Back