Skip to content

Commit 6f54456

Browse files
authored
- builder.rb: emit kwargs node for indexasgn when opted in (#1053)
1 parent d34616f commit 6f54456

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

lib/parser/builders/default.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,10 @@ def index(receiver, lbrack_t, indexes, rbrack_t)
11961196
end
11971197

11981198
def index_asgn(receiver, lbrack_t, indexes, rbrack_t)
1199+
if self.class.emit_kwargs
1200+
rewrite_hash_args_to_kwargs(indexes)
1201+
end
1202+
11991203
if self.class.emit_index
12001204
n(:indexasgn, [ receiver, *indexes ],
12011205
index_map(receiver, lbrack_t, rbrack_t))

test/test_parser.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3625,6 +3625,33 @@ def test_send_index_asgn_legacy
36253625
Parser::Builders::Default.emit_index = true
36263626
end
36273627

3628+
def test_send_index_asgn_kwarg
3629+
assert_parses(
3630+
s(:indexasgn,
3631+
s(:lvar, :foo),
3632+
s(:kwargs,
3633+
s(:pair,
3634+
s(:sym, :kw),
3635+
s(:send, nil, :arg))),
3636+
s(:int, 3)),
3637+
%q{foo[:kw => arg] = 3})
3638+
end
3639+
3640+
def test_send_index_asgn_kwarg_legacy
3641+
Parser::Builders::Default.emit_kwargs = false
3642+
assert_parses(
3643+
s(:indexasgn,
3644+
s(:lvar, :foo),
3645+
s(:hash,
3646+
s(:pair,
3647+
s(:sym, :kw),
3648+
s(:send, nil, :arg))),
3649+
s(:int, 3)),
3650+
%q{foo[:kw => arg] = 3})
3651+
ensure
3652+
Parser::Builders::Default.emit_kwargs = true
3653+
end
3654+
36283655
def test_send_lambda
36293656
assert_parses(
36303657
s(:block, s(:lambda),

0 commit comments

Comments
 (0)