From: get.codetriage@... Date: 2021-02-11T03:32:48+00:00 Subject: [ruby-core:102453] [Ruby master Bug#17621] Ripper can call on_parse_error multiple times for syntax error. Is this correct? Issue #17621 has been updated by schneems (Richard Schneeman). > What do you mean by "more context"? The responses from Ilya here make sense https://twitter.com/schneems/status/1359613202460459010. Basically just because a syntax error is reached it doesn't mean that parsing stops. Multiple errors can generate multiple syntax errors. ```ruby 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 bar [1,2,3 end def bar [1,2,3 end def bar [1,2,3 end def bar [1,2,3 end def call end end end EOM MyRipperSubclass.new(source).parse {:count=>1, :msg=>"syntax error, unexpected `end', expecting ']'"} {:count=>2, :msg=>"syntax error, unexpected `end', expecting ']'"} {:count=>3, :msg=>"syntax error, unexpected `end', expecting ']'"} {:count=>4, :msg=>"syntax error, unexpected `end', expecting ']'"} {:count=>5, :msg=>"syntax error, unexpected end-of-input, expecting `end'"} ``` Thank you for the response Nobu ���� ---------------------------------------- Bug #17621: Ripper can call on_parse_error multiple times for syntax error. Is this correct? https://bugs.ruby-lang.org/issues/17621#change-90340 * Author: mauro_oto (Mauro Otonelli) * Status: Open * Priority: Normal * ruby -v: 2.7.2 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Here's an example subclass of Ripper: ``` ruby 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: ``` ruby 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? -- https://bugs.ruby-lang.org/ Unsubscribe: