Project

General

Profile

Actions

Bug #19861

closed

Ripper does not fire any error event on unfinished heredoc

Added by thyresias (Thierry Lambert) over 1 year ago. Updated over 1 year ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x64-mingw-ucrt]
[ruby-core:114625]

Description

require 'ripper'

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0