summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEarlopain <[email protected]>2025-01-20 18:38:08 +0100
committerKevin Newton <[email protected]>2025-03-18 13:36:53 -0400
commitf49a0114e36cbff434a442561b9637760665897b (patch)
treef2a47fff2426c2d27dd0d63997b935a818bad0f7 /lib
parent12541d2cc0c550197d3b5b848315886149930519 (diff)
[ruby/prism] Fix parser translator rescue location with semicolon body
There are a few other locations that should be included in that check. I think the end location must always be present but I left it in to be safe (maybe implicit begin somehow?) https://github.com/ruby/prism/commit/545d07ddc3
Diffstat (limited to 'lib')
-rw-r--r--lib/prism/translation/parser/compiler.rb9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/prism/translation/parser/compiler.rb b/lib/prism/translation/parser/compiler.rb
index 1459b53c48..05c3a64c5b 100644
--- a/lib/prism/translation/parser/compiler.rb
+++ b/lib/prism/translation/parser/compiler.rb
@@ -206,7 +206,14 @@ module Prism
if (rescue_clause = node.rescue_clause)
begin
find_start_offset = (rescue_clause.reference&.location || rescue_clause.exceptions.last&.location || rescue_clause.keyword_loc).end_offset
- find_end_offset = (rescue_clause.statements&.location&.start_offset || rescue_clause.subsequent&.location&.start_offset || (find_start_offset + 1))
+ find_end_offset = (
+ rescue_clause.statements&.location&.start_offset ||
+ rescue_clause.subsequent&.location&.start_offset ||
+ node.else_clause&.location&.start_offset ||
+ node.ensure_clause&.location&.start_offset ||
+ node.end_keyword_loc&.start_offset ||
+ find_start_offset + 1
+ )
rescue_bodies << builder.rescue_body(
token(rescue_clause.keyword_loc),