Skip to content

Commit

Permalink
Fix printing of underscore Pexp_fun sugar in context of Array.get (re…
Browse files Browse the repository at this point in the history
…script-lang#414)

Fixes GH413

`Array.get(_, 0)` shouldn't be printed as `_[0]`
  • Loading branch information
IwanKaramazow authored May 14, 2021
1 parent 8001a62 commit 09c3c81
Show file tree
Hide file tree
Showing 7 changed files with 29 additions and 1 deletion.
5 changes: 5 additions & 0 deletions syntax/src/res_parsetree_viewer.ml
Original file line number Diff line number Diff line change
Expand Up @@ -569,3 +569,8 @@ let isUnderscoreApplySugar expr =
{pexp_desc = Pexp_apply _}
) -> true
| _ -> false

let isRewrittenUnderscoreApplySugar expr =
match expr.pexp_desc with
| Pexp_ident {txt = Longident.Lident "_"} -> true
| _ -> false
2 changes: 2 additions & 0 deletions syntax/src/res_parsetree_viewer.mli
Original file line number Diff line number Diff line change
Expand Up @@ -128,3 +128,5 @@ val rewriteUnderscoreApply: Parsetree.expression -> Parsetree.expression
val isUnderscoreApplySugar: Parsetree.expression -> bool

val hasIfLetAttribute: Parsetree.attributes -> bool

val isRewrittenUnderscoreApplySugar: Parsetree.expression -> bool
3 changes: 2 additions & 1 deletion syntax/src/res_printer.ml
Original file line number Diff line number Diff line change
Expand Up @@ -3670,7 +3670,8 @@ and printPexpApply expr cmtTbl =
| Pexp_apply (
{pexp_desc = Pexp_ident {txt = Longident.Ldot (Lident "Array", "get")}},
[Nolabel, parentExpr; Nolabel, memberExpr]
) ->
) when not (ParsetreeViewer.isRewrittenUnderscoreApplySugar parentExpr) ->
(* Don't print the Array.get(_, 0) sugar a.k.a. (__x) => Array.get(__x, 0) as _[0] *)
let member =
let memberDoc =
let doc = printExpressionWithComments memberExpr cmtTbl in
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
let photo = pricedRoom["room"]["photos"] |> filterNone |> Array.get(_, 0)
1 change: 1 addition & 0 deletions syntax/tests/conversion/reason/underscoreSugar.re
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
let photo = pricedRoom#room#photos |> filterNone |> Array.get(_, 0);
9 changes: 9 additions & 0 deletions syntax/tests/printer/expr/expected/underscoreApply.res.txt
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,12 @@ f(a, b, _)[ix]
f(a, b, _)[ix] = 2

getDirector(a, b, _).name = "Steve"

filterNone |> Array.get(_, 0)
filterNone->Array.get(_, 0)
Array.get(_, 0)
1 + Array.get(_, 0)
Array.get(_, 1) + Array.get(_, 0)
let f = Array.get(_, 0)

let photo = pricedRoom["room"]["photos"] |> filterNone |> Array.get(_, 0)
9 changes: 9 additions & 0 deletions syntax/tests/printer/expr/underscoreApply.res
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,12 @@ f(a, b, _)[ix]
f(a, b, _)[ix] = 2

getDirector(a, b, _).name = "Steve"

filterNone |> Array.get(_, 0)
filterNone->Array.get(_, 0)
Array.get(_, 0)
1 + Array.get(_, 0)
Array.get(_, 1) + Array.get(_, 0)
let f = Array.get(_, 0)

let photo = pricedRoom["room"]["photos"] |> filterNone |> Array.get(_, 0)

0 comments on commit 09c3c81

Please sign in to comment.