Skip to content

Commit 4ef969d

Browse files
committed
Merge branch 'master' into wip/sip-64-colon
2 parents 9e1671f + fb9aa82 commit 4ef969d

File tree

9 files changed

+404611
-404542
lines changed

9 files changed

+404611
-404542
lines changed

grammar.js

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ module.exports = grammar({
9292
[$.class_parameters],
9393
// 'for' operator_identifier ':' _annotated_type • ':' …
9494
[$._type, $.compound_type],
95+
// 'given' '(' operator_identifier ':' _type • ',' …
96+
[$.name_and_type, $.parameter],
97+
[$._simple_expression, $.binding, $.tuple_pattern],
98+
[$._simple_expression, $.tuple_pattern],
99+
[$._simple_expression, $._type_identifier],
95100
// 'if' parenthesized_expression • '{' …
96101
[$._if_condition, $._simple_expression],
97102
[$.block, $._braced_template_body1],
@@ -575,10 +580,14 @@ module.exports = grammar({
575580
prec.right(
576581
seq(
577582
field("name", $._identifier),
578-
field("type_parameters", optional($.type_parameters)),
579583
field(
580584
"parameters",
581-
repeat(seq(optional($._automatic_semicolon), $.parameters)),
585+
repeat(
586+
seq(
587+
optional($._automatic_semicolon),
588+
choice($.parameters, $.type_parameters),
589+
),
590+
),
582591
),
583592
optional($._automatic_semicolon),
584593
),
@@ -818,6 +827,19 @@ module.exports = grammar({
818827
),
819828
),
820829

830+
/*
831+
* NameAndType ::= id ':' Type
832+
*/
833+
name_and_type: $ =>
834+
prec.left(
835+
PREC.control,
836+
seq(
837+
field("name", $._identifier),
838+
":",
839+
field("type", $._param_type),
840+
),
841+
),
842+
821843
_block: $ =>
822844
prec.left(
823845
seq(
@@ -872,6 +894,7 @@ module.exports = grammar({
872894
$.generic_type,
873895
$.projected_type,
874896
$.tuple_type,
897+
$.named_tuple_type,
875898
$.singleton_type,
876899
$.stable_type_identifier,
877900
$._type_identifier,
@@ -933,6 +956,12 @@ module.exports = grammar({
933956

934957
tuple_type: $ => seq("(", trailingCommaSep1($._type), ")"),
935958

959+
named_tuple_type: $ => seq(
960+
"(",
961+
trailingCommaSep1($.name_and_type),
962+
")",
963+
),
964+
936965
singleton_type: $ =>
937966
prec.left(
938967
PREC.stable_type_id,
@@ -1027,6 +1056,7 @@ module.exports = grammar({
10271056
$.interpolated_string_expression,
10281057
$.capture_pattern,
10291058
$.tuple_pattern,
1059+
$.named_tuple_pattern,
10301060
$.case_class_pattern,
10311061
$.infix_pattern,
10321062
$.alternative_pattern,
@@ -1042,7 +1072,10 @@ module.exports = grammar({
10421072
seq(
10431073
field("type", choice($._type_identifier, $.stable_type_identifier)),
10441074
"(",
1045-
field("pattern", trailingCommaSep($._pattern)),
1075+
choice(
1076+
field("pattern", trailingCommaSep($._pattern)),
1077+
field("pattern", trailingCommaSep($.named_pattern)),
1078+
),
10461079
")",
10471080
),
10481081

@@ -1070,15 +1103,28 @@ module.exports = grammar({
10701103

10711104
typed_pattern: $ =>
10721105
prec.right(
1106+
-1,
10731107
seq(field("pattern", $._pattern), ":", field("type", $._type)),
10741108
),
10751109

10761110
given_pattern: $ => seq("given", field("type", $._type)),
10771111

10781112
// TODO: Flatten this.
1079-
alternative_pattern: $ => prec.left(-1, seq($._pattern, "|", $._pattern)),
1113+
alternative_pattern: $ => prec.left(-2, seq($._pattern, "|", $._pattern)),
1114+
1115+
tuple_pattern: $ => seq(
1116+
"(",
1117+
trailingCommaSep1($._pattern),
1118+
")",
1119+
),
1120+
1121+
named_pattern: $ => prec.left(-1, seq($._identifier, "=", $._pattern)),
10801122

1081-
tuple_pattern: $ => seq("(", $._pattern, repeat(seq(",", $._pattern)), ")"),
1123+
named_tuple_pattern: $ => seq(
1124+
"(",
1125+
trailingCommaSep1($.named_pattern),
1126+
")",
1127+
),
10821128

10831129
// ---------------------------------------------------------------
10841130
// Expressions

0 commit comments

Comments
 (0)