Skip to content

Commit a7b4ac2

Browse files
committed
- builder.rb: emit kwargs node for indexasgn when opted in
1 parent d230989 commit a7b4ac2

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

lib/parser/builders/default.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1192,6 +1192,10 @@ def index(receiver, lbrack_t, indexes, rbrack_t)
11921192
end
11931193

11941194
def index_asgn(receiver, lbrack_t, indexes, rbrack_t)
1195+
if self.class.emit_kwargs
1196+
rewrite_hash_args_to_kwargs(indexes)
1197+
end
1198+
11951199
if self.class.emit_index
11961200
n(:indexasgn, [ receiver, *indexes ],
11971201
index_map(receiver, lbrack_t, rbrack_t))

test/test_parser.rb

+27
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)