@@ -1125,16 +1125,16 @@ and resugar_pattern_list_inner = (patterns: list(Parsetree.pattern)) => {
11251125 switch (patterns) {
11261126 | [ arg1 , arg2 , ... _ ] =>
11271127 switch (arg2. ppat_desc) {
1128- | PPatConstruct (innerfunc , innerpatterns ) =>
1129- let func =
1130- switch (innerfunc . txt) {
1128+ | PPatConstruct (innercstr , innerpatterns ) =>
1129+ let cstr =
1130+ switch (innercstr . txt) {
11311131 | IdentName ({txt: name }) => name
11321132 | _ => ""
11331133 };
11341134
1135- if (func == "[]" ) {
1135+ if (cstr == "[]" ) {
11361136 [ RegularPattern (arg1)] ;
1137- } else if (func == list_cons) {
1137+ } else if (cstr == list_cons) {
11381138 let inner = resugar_pattern_list_inner(innerpatterns);
11391139 [ RegularPattern (arg1), ... inner] ;
11401140 } else {
@@ -1148,20 +1148,6 @@ and resugar_pattern_list_inner = (patterns: list(Parsetree.pattern)) => {
11481148 };
11491149}
11501150
1151- and is_empty_list = (expr: Parsetree . expression ) => {
1152- switch (expr. pexp_desc) {
1153- | PExpId (loc ) =>
1154- let loc_txt =
1155- switch (loc. txt) {
1156- | IdentName ({txt: name }) => name
1157- | _ => ""
1158- };
1159-
1160- loc_txt == "[]" ;
1161- | _ => false
1162- };
1163- }
1164-
11651151and resugar_list =
11661152 (
11671153 ~original_source: array (string ),
@@ -1323,21 +1309,11 @@ and resugar_list_inner = (expressions: list(Parsetree.expression)) =>
13231309 switch (expressions) {
13241310 | [ arg1 , arg2 ] =>
13251311 switch (arg2. pexp_desc) {
1326- | PExpApp (innerfunc , innerexpressions ) =>
1327- let func_name = get_function_name(innerfunc);
1328-
1329- if (func_name == list_cons) {
1330- let inner = resugar_list_inner(innerexpressions);
1331- List . append([ Regular (arg1)] , inner);
1332- } else {
1333- [ Regular (arg1), Spread (arg2)] ;
1334- };
1335- | _ =>
1336- if (is_empty_list(arg2)) {
1337- [ Regular (arg1)] ;
1338- } else {
1339- [ Regular (arg1), Spread (arg2)] ;
1340- }
1312+ | PExpConstruct ({txt: IdentName ({txt: "[...]" })}, innerexpressions ) =>
1313+ let inner = resugar_list_inner(innerexpressions);
1314+ List . append([ Regular (arg1)] , inner);
1315+ | PExpConstruct ({txt: IdentName ({txt: "[]" })}, _ ) => [ Regular (arg1)]
1316+ | _ => [ Regular (arg1), Spread (arg2)]
13411317 }
13421318 | _ =>
13431319 // Grain syntax makes it impossible to construct a list cons without
@@ -2438,8 +2414,6 @@ and print_other_application =
24382414 )
24392415 | _ when infixop(function_name) =>
24402416 raise (IllegalParse ("Formatter error, wrong number of args " ))
2441- | _ when function_name == list_cons =>
2442- resugar_list(~original_source, ~comments, expressions)
24432417 | [ first_expr , ... _ ]
24442418 when Array . exists(fn => function_name == fn, exception_primitives) =>
24452419 Doc . concat([
@@ -3617,6 +3591,24 @@ and print_expression_inner =
36173591 ~comments= comments_in_expression,
36183592 func,
36193593 );
3594+ | PExpConstruct ({txt: IdentName ({txt: "[...]" })}, expressions ) =>
3595+ resugar_list(~original_source, ~comments, expressions)
3596+ | PExpConstruct ({txt: IdentName ({txt: "[]" })}, expressions ) =>
3597+ Doc . text("[]" )
3598+ | PExpConstruct ({txt: id }, [] ) => print_ident(id)
3599+ | PExpConstruct (constr , expressions ) =>
3600+ let comments_in_expression =
3601+ Comment_utils . get_comments_inside_location(
3602+ ~location= expr. pexp_loc,
3603+ comments,
3604+ );
3605+ print_application(
3606+ ~expression_parent,
3607+ ~expressions,
3608+ ~original_source,
3609+ ~comments= comments_in_expression,
3610+ Ast_helper . Exp . ident(constr),
3611+ );
36203612 | PExpBlock (expressions ) =>
36213613 switch (expressions) {
36223614 | [] =>
@@ -3719,6 +3711,7 @@ and print_expression_inner =
37193711and is_grouped_access_expression = (expr: Parsetree . expression ) => {
37203712 switch (expr. pexp_desc) {
37213713 | PExpConstant (_ )
3714+ | PExpConstruct (_ )
37223715 | PExpTuple (_ )
37233716 | PExpId (_ )
37243717 | PExpArrayGet (_ )
0 commit comments