Skip to content

Commit 9794bf2

Browse files
authored
Merge pull request #3416 from ruby/rescue-then
Track then keyword on rescue nodes
2 parents d4c5007 + bde8ccc commit 9794bf2

37 files changed

+93
-3
lines changed

config.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4084,6 +4084,8 @@ nodes:
40844084
- on error: BackReferenceReadNode # => begin; rescue => $&; end
40854085
- on error: NumberedReferenceReadNode # => begin; rescue => $1; end
40864086
- on error: MissingNode # begin; rescue =>; end
4087+
- name: then_keyword_loc
4088+
type: location?
40874089
- name: statements
40884090
type: node?
40894091
kind: StatementsNode

src/prism.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6675,6 +6675,7 @@ pm_rescue_node_create(pm_parser_t *parser, const pm_token_t *keyword) {
66756675
},
66766676
.keyword_loc = PM_LOCATION_TOKEN_VALUE(keyword),
66776677
.operator_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE,
6678+
.then_keyword_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE,
66786679
.reference = NULL,
66796680
.statements = NULL,
66806681
.subsequent = NULL,
@@ -15060,8 +15061,8 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_
1506015061
case PM_TOKEN_NEWLINE:
1506115062
case PM_TOKEN_SEMICOLON:
1506215063
case PM_TOKEN_KEYWORD_THEN:
15063-
// Here we have a terminator for the rescue keyword, in which case we're
15064-
// going to just continue on.
15064+
// Here we have a terminator for the rescue keyword, in which
15065+
// case we're going to just continue on.
1506515066
break;
1506615067
default: {
1506715068
if (token_begins_expression_p(parser->current.type) || match1(parser, PM_TOKEN_USTAR)) {
@@ -15093,9 +15094,12 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_
1509315094
}
1509415095

1509515096
if (accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)) {
15096-
accept1(parser, PM_TOKEN_KEYWORD_THEN);
15097+
if (accept1(parser, PM_TOKEN_KEYWORD_THEN)) {
15098+
rescue->then_keyword_loc = PM_OPTIONAL_LOCATION_TOKEN_VALUE(&parser->previous);
15099+
}
1509715100
} else {
1509815101
expect1(parser, PM_TOKEN_KEYWORD_THEN, PM_ERR_RESCUE_TERM);
15102+
rescue->then_keyword_loc = PM_OPTIONAL_LOCATION_TOKEN_VALUE(&parser->previous);
1509915103
}
1510015104

1510115105
if (!match3(parser, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_END)) {

test/prism/snapshots/arrays.txt

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/begin_rescue.txt

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/blocks.txt

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/classes.txt

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/keywords.txt

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/methods.txt

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/modules.txt

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/prism/snapshots/procs.txt

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)