From a7b4ac293ee3721b6a19b497c3d6c1c36fed6e3e Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Fri, 20 Dec 2024 11:49:22 +0100 Subject: [PATCH] - builder.rb: emit `kwargs` node for `indexasgn` when opted in --- lib/parser/builders/default.rb | 4 ++++ test/test_parser.rb | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/parser/builders/default.rb b/lib/parser/builders/default.rb index 115ef403b..29cf2e927 100644 --- a/lib/parser/builders/default.rb +++ b/lib/parser/builders/default.rb @@ -1192,6 +1192,10 @@ def index(receiver, lbrack_t, indexes, rbrack_t) end def index_asgn(receiver, lbrack_t, indexes, rbrack_t) + if self.class.emit_kwargs + rewrite_hash_args_to_kwargs(indexes) + end + if self.class.emit_index n(:indexasgn, [ receiver, *indexes ], index_map(receiver, lbrack_t, rbrack_t)) diff --git a/test/test_parser.rb b/test/test_parser.rb index d67c09873..1ed967a85 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -3625,6 +3625,33 @@ def test_send_index_asgn_legacy Parser::Builders::Default.emit_index = true end + def test_send_index_asgn_kwarg + assert_parses( + s(:indexasgn, + s(:lvar, :foo), + s(:kwargs, + s(:pair, + s(:sym, :kw), + s(:send, nil, :arg))), + s(:int, 3)), + %q{foo[:kw => arg] = 3}) + end + + def test_send_index_asgn_kwarg_legacy + Parser::Builders::Default.emit_kwargs = false + assert_parses( + s(:indexasgn, + s(:lvar, :foo), + s(:hash, + s(:pair, + s(:sym, :kw), + s(:send, nil, :arg))), + s(:int, 3)), + %q{foo[:kw => arg] = 3}) + ensure + Parser::Builders::Default.emit_kwargs = true + end + def test_send_lambda assert_parses( s(:block, s(:lambda),