[ruby-core:119214] [Ruby master Bug#20747] [prism] regression in retry precedence

Issue #20747 has been reported by byroot (Jean Boussier). ---------------------------------------- Bug #20747: [prism] regression in retry precedence https://bugs.ruby-lang.org/issues/20747 * Author: byroot (Jean Boussier) * Status: Open * Assignee: kddnewton (Kevin Newton) * ruby -v: ruby 3.4.0dev (2024-09-15T01:06:11Z master 532af89e3b) +PRISM [arm64-darwin23] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- Since prism has been made the default, our test suite now fail to boot with the following error: ```ruby syntax error found (SyntaxError) 298 | raise e 299 | else
300 | retry | ^~~~~ Invalid retry after else 301 | end 302 | end
Here's the code in question, that reproduce the error:
```ruby
def retry_thing(times: 1)
retries ||= 0
begin
yield
rescue RuntimeError => e
raise if (retries += 1) > times
begin
refresh!
rescue
raise e
else
retry
end
end
end

Issue #20747 has been updated by luke-gru (Luke Gruber). PR here: https://github.com/ruby/ruby/pull/11631 ---------------------------------------- Bug #20747: [prism] regression in retry precedence https://bugs.ruby-lang.org/issues/20747#change-109798 * Author: byroot (Jean Boussier) * Status: Open * Assignee: kddnewton (Kevin Newton) * ruby -v: ruby 3.4.0dev (2024-09-15T01:06:11Z master 532af89e3b) +PRISM [arm64-darwin23] * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- Since prism has been made the default, our test suite now fail to boot with the following error: ```ruby syntax error found (SyntaxError) 298 | raise e 299 | else
300 | retry | ^~~~~ Invalid retry after else 301 | end 302 | end
Here's the code in question, that reproduce the error:
```ruby
def retry_thing(times: 1)
retries ||= 0
begin
yield
rescue RuntimeError => e
raise if (retries += 1) > times
begin
refresh!
rescue
raise e
else
retry
end
end
end

Issue #20747 has been updated by kddnewton (Kevin Newton). I have opened a PR to fix this: https://github.com/ruby/prism/pull/3073. ---------------------------------------- Bug #20747: [prism] regression in retry precedence https://bugs.ruby-lang.org/issues/20747#change-109810 * Author: byroot (Jean Boussier) * Status: Open * Assignee: kddnewton (Kevin Newton) * ruby -v: ruby 3.4.0dev (2024-09-15T01:06:11Z master 532af89e3b) +PRISM [arm64-darwin23] * Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED ---------------------------------------- Since prism has been made the default, our test suite now fail to boot with the following error: ```ruby syntax error found (SyntaxError) 298 | raise e 299 | else
300 | retry | ^~~~~ Invalid retry after else 301 | end 302 | end
Here's the code in question, that reproduce the error:
```ruby
def retry_thing(times: 1)
retries ||= 0
begin
yield
rescue RuntimeError => e
raise if (retries += 1) > times
begin
refresh!
rescue
raise e
else
retry
end
end
end
participants (3)
-
byroot (Jean Boussier)
-
kddnewton (Kevin Newton)
-
luke-gru (Luke Gruber)