Skip to content

Commit 09c3c81

Browse files
Fix printing of underscore Pexp_fun sugar in context of Array.get (rescript-lang#414)
Fixes GH413 `Array.get(_, 0)` shouldn't be printed as `_[0]`
1 parent 8001a62 commit 09c3c81

File tree

7 files changed

+29
-1
lines changed

7 files changed

+29
-1
lines changed

syntax/src/res_parsetree_viewer.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,3 +569,8 @@ let isUnderscoreApplySugar expr =
569569
{pexp_desc = Pexp_apply _}
570570
) -> true
571571
| _ -> false
572+
573+
let isRewrittenUnderscoreApplySugar expr =
574+
match expr.pexp_desc with
575+
| Pexp_ident {txt = Longident.Lident "_"} -> true
576+
| _ -> false

syntax/src/res_parsetree_viewer.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,5 @@ val rewriteUnderscoreApply: Parsetree.expression -> Parsetree.expression
128128
val isUnderscoreApplySugar: Parsetree.expression -> bool
129129

130130
val hasIfLetAttribute: Parsetree.attributes -> bool
131+
132+
val isRewrittenUnderscoreApplySugar: Parsetree.expression -> bool

syntax/src/res_printer.ml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3670,7 +3670,8 @@ and printPexpApply expr cmtTbl =
36703670
| Pexp_apply (
36713671
{pexp_desc = Pexp_ident {txt = Longident.Ldot (Lident "Array", "get")}},
36723672
[Nolabel, parentExpr; Nolabel, memberExpr]
3673-
) ->
3673+
) when not (ParsetreeViewer.isRewrittenUnderscoreApplySugar parentExpr) ->
3674+
(* Don't print the Array.get(_, 0) sugar a.k.a. (__x) => Array.get(__x, 0) as _[0] *)
36743675
let member =
36753676
let memberDoc =
36763677
let doc = printExpressionWithComments memberExpr cmtTbl in
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let photo = pricedRoom["room"]["photos"] |> filterNone |> Array.get(_, 0)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let photo = pricedRoom#room#photos |> filterNone |> Array.get(_, 0);

syntax/tests/printer/expr/expected/underscoreApply.res.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,12 @@ f(a, b, _)[ix]
5252
f(a, b, _)[ix] = 2
5353

5454
getDirector(a, b, _).name = "Steve"
55+
56+
filterNone |> Array.get(_, 0)
57+
filterNone->Array.get(_, 0)
58+
Array.get(_, 0)
59+
1 + Array.get(_, 0)
60+
Array.get(_, 1) + Array.get(_, 0)
61+
let f = Array.get(_, 0)
62+
63+
let photo = pricedRoom["room"]["photos"] |> filterNone |> Array.get(_, 0)

syntax/tests/printer/expr/underscoreApply.res

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,12 @@ f(a, b, _)[ix]
5454
f(a, b, _)[ix] = 2
5555

5656
getDirector(a, b, _).name = "Steve"
57+
58+
filterNone |> Array.get(_, 0)
59+
filterNone->Array.get(_, 0)
60+
Array.get(_, 0)
61+
1 + Array.get(_, 0)
62+
Array.get(_, 1) + Array.get(_, 0)
63+
let f = Array.get(_, 0)
64+
65+
let photo = pricedRoom["room"]["photos"] |> filterNone |> Array.get(_, 0)

0 commit comments

Comments
 (0)