diff --git a/doc/AST_FORMAT.md b/doc/AST_FORMAT.md index 139e4447f..ede684a1f 100644 --- a/doc/AST_FORMAT.md +++ b/doc/AST_FORMAT.md @@ -2139,7 +2139,7 @@ Format: "in X[^foo bar]" ~ begin (const-pattern) ~ end (const-pattern) - ~~~~~~~~~~~ expression (const-pattern) + ~~~~~~~~~~~~ expression (const-pattern) ~ name (const-pattern.const) ~ expression (const-pattern.const) ~~~ @@ -2157,7 +2157,7 @@ Format: "in X[foo:, bar:]" ~ begin (const-pattern) ~ end (const-pattern) - ~~~~~~~~~~~~ expression (const-pattern) + ~~~~~~~~~~~~~ expression (const-pattern) ~ name (const-pattern.const) ~ expression (const-pattern.const) ~~~ @@ -2173,7 +2173,7 @@ Format: "in X[]" ~ begin (const-pattern) ~ end (const-pattern) - ~~ expression (const-pattern) + ~~~ expression (const-pattern) ~ name (const-pattern.const) ~ expression (const-pattern.const) ~~ expression (const-pattern.array_pattern) diff --git a/lib/parser/builders/default.rb b/lib/parser/builders/default.rb index 319fda516..860d84e84 100644 --- a/lib/parser/builders/default.rb +++ b/lib/parser/builders/default.rb @@ -1340,7 +1340,11 @@ def match_with_trailing_comma(match, comma_t) def const_pattern(const, ldelim_t, pattern, rdelim_t) n(:const_pattern, [const, pattern], - collection_map(ldelim_t, [pattern], rdelim_t)) + Source::Map::Collection.new( + loc(ldelim_t), loc(rdelim_t), + const.loc.expression.join(loc(rdelim_t)) + ) + ) end def pin(pin_t, var) diff --git a/test/test_parser.rb b/test/test_parser.rb index a2279bae9..884f135f8 100644 --- a/test/test_parser.rb +++ b/test/test_parser.rb @@ -8993,7 +8993,7 @@ def test_pattern_matching_const_pattern nil, s(:true)), %q{in A(1, 2) then true}, - %q{ ~~~~~~ expression (in_pattern.const_pattern) + %q{ ~~~~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) @@ -9009,7 +9009,7 @@ def test_pattern_matching_const_pattern nil, s(:true)), %q{in A(x:) then true}, - %q{ ~~~~ expression (in_pattern.const_pattern) + %q{ ~~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) @@ -9024,7 +9024,7 @@ def test_pattern_matching_const_pattern nil, s(:true)), %q{in A() then true}, - %q{ ~~ expression (in_pattern.const_pattern) + %q{ ~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) @@ -9041,7 +9041,7 @@ def test_pattern_matching_const_pattern nil, s(:true)), %q{in A[1, 2] then true}, - %q{ ~~~~~~ expression (in_pattern.const_pattern) + %q{ ~~~~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) @@ -9057,7 +9057,7 @@ def test_pattern_matching_const_pattern nil, s(:true)), %q{in A[x:] then true}, - %q{ ~~~~ expression (in_pattern.const_pattern) + %q{ ~~~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~ expression (in_pattern.const_pattern.const) @@ -9072,7 +9072,7 @@ def test_pattern_matching_const_pattern nil, s(:true)), %q{in A[] then true}, - %q{ ~~ expression (in_pattern.const_pattern) + %q{ ~~~ expression (in_pattern.const_pattern) | ~ begin (in_pattern.const_pattern) | ~ end (in_pattern.const_pattern) | ~~ expression (in_pattern.const_pattern.array_pattern)}