Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Commit 3c9c49f

Browse files
use @ to concat lists
1 parent 3459747 commit 3c9c49f

File tree

5 files changed

+35
-21
lines changed

5 files changed

+35
-21
lines changed

src/res_core.ml

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,26 @@ let makeListPattern loc seq ext_opt =
451451
in
452452
handle_seq seq
453453

454+
let makeListAppend loc seq =
455+
let rec handle_seq = function
456+
| [] ->
457+
let loc = {loc with Location.loc_ghost = true} in
458+
let nil = {Location.txt = Longident.Lident "[]"; loc} in
459+
Ast_helper.Exp.construct ~loc nil None
460+
| [e1] -> e1
461+
| e1 :: el ->
462+
let exp_el = handle_seq el in
463+
let loc =
464+
mkLoc e1.Parsetree.pexp_loc.Location.loc_start exp_el.pexp_loc.loc_end
465+
in
466+
Ast_helper.Exp.apply ~loc
467+
(Ast_helper.Exp.ident (Location.mkloc (Longident.Lident "@") loc))
468+
[Nolabel, e1;
469+
Nolabel, exp_el]
470+
in
471+
handle_seq seq
472+
473+
454474
(* TODO: diagnostic reporting *)
455475
let lidentOfPath longident =
456476
match Longident.flatten longident |> List.rev with
@@ -3743,13 +3763,7 @@ and parseListExpr ~startPos p =
37433763
| [(exprs, None, _, _)] -> makeListExpression loc exprs None
37443764
| exprs ->
37453765
let listExprs = List.map make_sub_expr exprs in
3746-
Ast_helper.Exp.apply ~loc
3747-
(Ast_helper.Exp.ident ~loc
3748-
(Location.mkloc
3749-
(Longident.Ldot
3750-
(Longident.Ldot (Longident.Lident "Belt", "List"), "concatMany"))
3751-
loc))
3752-
[(Asttypes.Nolabel, Ast_helper.Exp.array ~loc listExprs)]
3766+
makeListAppend loc listExprs
37533767
(* | (true (\* spread expression *\), expr, _) :: exprs ->
37543768
* let exprs = check_all_non_spread_exp exprs in
37553769
* makeListExpression loc exprs (Some expr)

src/res_parsetree_viewer.mli

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ val collectListExpressions :
4444
Parsetree.expression ->
4545
Parsetree.expression list * Parsetree.expression option
4646

47+
val collectConcatListExpressions :
48+
Parsetree.expression ->
49+
(Parsetree.expression list * Parsetree.expression option) list
50+
4751
type funParamKind =
4852
| Parameter of {
4953
attrs: Parsetree.attributes;

tests/parsing/errors/other/expected/spread.res.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ let arr = [|x;y|]
100100
let [|arr;_|] = [|1;2;3|]
101101
let record = { x with y }
102102
let { x; y } = myRecord
103-
let myList = Belt.List.concatMany [|x;y|]
103+
let myList = x @ y
104104
let x::y = myList
105105
type nonrec t = < a >
106106
type nonrec t =

tests/parsing/grammar/expressions/expected/list.res.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ let x = [1; 2; 3]
33
let x = [1; 2; 3]
44
let x = [(1 : int); (2 : int); (3 : int)]
55
let x = 4 :: 5 :: y
6-
let x = Belt.List.concatMany [|(1 :: x);(2 :: 3 :: x)|]
6+
let x = (1 :: x) @ (2 :: 3 :: x)
77
let x = 1 :: 2 :: (y : int list)

tests/printer/expr/expected/list.res.txt

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ let x = list{}
22
let x = list{1}
33
let x = list{1, 2}
44
let x = list{1, 2, 3}
5-
let x = Belt.List.concatMany([list{1, 2, ...x}, list{3, ...x}])
5+
let x = list{1, 2, ...x3, ...x}
66

77
let x = list{
88
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
@@ -19,14 +19,10 @@ let x = list{
1919
...superLoooooooooooooooooooooooooooooongListHere,
2020
}
2121

22-
let x = Belt.List.concatMany([
23-
list{
24-
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
25-
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
26-
...superLoooooooooooooooooooooooooooooongListHere,
27-
},
28-
list{
29-
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
30-
...superLoooooooooooooooooooooooooooooongListHere,
31-
},
32-
])
22+
let x = list{
23+
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
24+
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
25+
...superLoooooooooooooooooooooooooooooongListHere
26+
superLoooooooooooooooooooooooooooooongIiiiiiiiiideeeentifieeeeeeeeeeeeeeeeer,
27+
...superLoooooooooooooooooooooooooooooongListHere,
28+
}

0 commit comments

Comments
 (0)