[#102652] [Ruby master Bug#17664] Behavior of sockets changed in Ruby 3.0 to non-blocking — ciconia@...
Issue #17664 has been reported by ciconia (Sharon Rosner).
23 messages
2021/02/28
[ruby-core:102453] [Ruby master Bug#17621] Ripper can call on_parse_error multiple times for syntax error. Is this correct?
From:
get.codetriage@...
Date:
2021-02-11 03:32:48 UTC
List:
ruby-core #102453
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>