Project

General

Profile

Actions

Bug #17621

closed

Ripper can call on_parse_error multiple times for syntax error. Is this correct?

Added by mauro_oto (Mauro Otonelli) about 3 years ago. Updated about 3 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:102449]

Description

Here's an example subclass of Ripper:

class MyRipperSubclass < Ripper
  def on_parse_error(msg)
    @count ||= 0
    @count += 1
    puts [count: @count, msg: msg]
  end
end
source = <<~EOM
  module Hey
    class Foo
      def initialize
        [1,2,3
      end
      def call
      end
    end
  end
EOM
MyRipperSubclass.new(source).parse

The source it's parsing has a syntax error, so I would only expect one parse error. However, when you execute this code, you see two:

MyRipperSubclass.new(source).parse
# => {:count=>1, :msg=>"syntax error, unexpected `end', expecting ']'"}
# => {:count=>2, :msg=>"syntax error, unexpected end-of-input, expecting `end'"}

Is this a bug, or is this expected? If this is expected, can you give me more context? Is there an upper bound to the number of parse errors a document can generate? Is the order guaranteed?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0