From d7597c4f8b7bc8bee0ace1326d23a4257067daac Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 1 Sep 2022 11:22:46 +0200 Subject: [PATCH 1/5] Add example of pipe reformat eating annotation See https://github.com/rescript-lang/rescript-compiler/issues/5627 --- tests/printer/expr/expected/pipe.res.txt | 2 ++ tests/printer/expr/pipe.res | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 tests/printer/expr/expected/pipe.res.txt create mode 100644 tests/printer/expr/pipe.res diff --git a/tests/printer/expr/expected/pipe.res.txt b/tests/printer/expr/expected/pipe.res.txt new file mode 100644 index 00000000..6ffe1821 --- /dev/null +++ b/tests/printer/expr/expected/pipe.res.txt @@ -0,0 +1,2 @@ +let s1 = x->foo +let s2 = @ann foo(x) diff --git a/tests/printer/expr/pipe.res b/tests/printer/expr/pipe.res new file mode 100644 index 00000000..2f0c5cda --- /dev/null +++ b/tests/printer/expr/pipe.res @@ -0,0 +1,2 @@ +let s1 = @ann (x->foo) +let s2 = @ann (foo(x)) From 1d000e2d5cf8cc98052894529d503c1c48f911e5 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 1 Sep 2022 11:28:32 +0200 Subject: [PATCH 2/5] Turns out `|>` has the same problem. --- tests/printer/expr/expected/pipe.res.txt | 1 + tests/printer/expr/pipe.res | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/printer/expr/expected/pipe.res.txt b/tests/printer/expr/expected/pipe.res.txt index 6ffe1821..80cebb50 100644 --- a/tests/printer/expr/expected/pipe.res.txt +++ b/tests/printer/expr/expected/pipe.res.txt @@ -1,2 +1,3 @@ let s1 = x->foo let s2 = @ann foo(x) +let s3 = x |> foo diff --git a/tests/printer/expr/pipe.res b/tests/printer/expr/pipe.res index 2f0c5cda..1a70951d 100644 --- a/tests/printer/expr/pipe.res +++ b/tests/printer/expr/pipe.res @@ -1,2 +1,3 @@ let s1 = @ann (x->foo) let s2 = @ann (foo(x)) +let s3 = @ann (x|>foo) \ No newline at end of file From 3fec13eea5e9d1c030b016a3f4ee80bbcd8c6331 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Thu, 1 Sep 2022 11:43:28 +0200 Subject: [PATCH 3/5] Fir reformatting issue for `->` and `|>`. --- CHANGELOG.md | 4 ++++ src/res_printer.ml | 1 + tests/printer/expr/expected/pipe.res.txt | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 448ff32c..788a99d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,10 @@ - Initial support for JSX V4, still work in progress. - :boom: when V4 is activated, at most one component is allowed for each module. +#### :bug: Bug Fix + +- Fix issue where the printer would omit attributes for `->` and `|>` https://github.com/rescript-lang/syntax/pull/629 + ## ReScript 10.0 - Fix printing for inline nullary functor types [#477](https://github.com/rescript-lang/syntax/pull/477) diff --git a/src/res_printer.ml b/src/res_printer.ml index c1d947d4..ca442be3 100644 --- a/src/res_printer.ml +++ b/src/res_printer.ml @@ -3658,6 +3658,7 @@ and printBinaryExpression ~customLayout (expr : Parsetree.expression) cmtTbl = Doc.group (Doc.concat [ + printAttributes ~customLayout expr.pexp_attributes cmtTbl; lhsDoc; (match (lhsHasCommentBelow, op) with | true, "|." -> Doc.concat [Doc.softLine; Doc.text "->"] diff --git a/tests/printer/expr/expected/pipe.res.txt b/tests/printer/expr/expected/pipe.res.txt index 80cebb50..6fdd3e4c 100644 --- a/tests/printer/expr/expected/pipe.res.txt +++ b/tests/printer/expr/expected/pipe.res.txt @@ -1,3 +1,3 @@ -let s1 = x->foo +let s1 = @ann x->foo let s2 = @ann foo(x) -let s3 = x |> foo +let s3 = @ann x |> foo From 6e87459ae1c6765b0e567aaa32b2625aae96b146 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Fri, 2 Sep 2022 06:27:36 +0200 Subject: [PATCH 4/5] Tweak test to show the difference between -> or |> and ** in printing. --- tests/printer/expr/expected/pipe.res.txt | 9 +++++++-- tests/printer/expr/pipe.res | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/tests/printer/expr/expected/pipe.res.txt b/tests/printer/expr/expected/pipe.res.txt index 6fdd3e4c..80f03a04 100644 --- a/tests/printer/expr/expected/pipe.res.txt +++ b/tests/printer/expr/expected/pipe.res.txt @@ -1,3 +1,8 @@ let s1 = @ann x->foo -let s2 = @ann foo(x) -let s3 = @ann x |> foo +let s1b = (@ann x)->foo + +let s2 = @ann x |> foo +let s2b = (@ann x) |> foo + +let s3 = @ann (x ** foo) +let s3b = (@ann x) ** foo diff --git a/tests/printer/expr/pipe.res b/tests/printer/expr/pipe.res index 1a70951d..82289c87 100644 --- a/tests/printer/expr/pipe.res +++ b/tests/printer/expr/pipe.res @@ -1,3 +1,8 @@ let s1 = @ann (x->foo) -let s2 = @ann (foo(x)) -let s3 = @ann (x|>foo) \ No newline at end of file +let s1b = @ann x->foo + +let s2 = @ann (x|>foo) +let s2b = @ann x|>foo + +let s3 = @ann (x**foo) +let s3b = @ann x**foo From e27f1be9fe20472f429b99fb73f67413af696cb6 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Fri, 2 Sep 2022 06:35:22 +0200 Subject: [PATCH 5/5] Check if there are printable attributes in pipe. --- src/res_printer.ml | 4 +++- tests/printer/expr/expected/pipe.res.txt | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/res_printer.ml b/src/res_printer.ml index ca442be3..b6f2d9dd 100644 --- a/src/res_printer.ml +++ b/src/res_printer.ml @@ -3651,7 +3651,9 @@ and printBinaryExpression ~customLayout (expr : Parsetree.expression) cmtTbl = [(Nolabel, lhs); (Nolabel, rhs)] ) when not (ParsetreeViewer.isBinaryExpression lhs - || ParsetreeViewer.isBinaryExpression rhs) -> + || ParsetreeViewer.isBinaryExpression rhs + || printAttributes ~customLayout expr.pexp_attributes cmtTbl + <> Doc.nil) -> let lhsHasCommentBelow = hasCommentBelow cmtTbl lhs.pexp_loc in let lhsDoc = printOperand ~isLhs:true lhs op in let rhsDoc = printOperand ~isLhs:false rhs op in diff --git a/tests/printer/expr/expected/pipe.res.txt b/tests/printer/expr/expected/pipe.res.txt index 80f03a04..a6ae377f 100644 --- a/tests/printer/expr/expected/pipe.res.txt +++ b/tests/printer/expr/expected/pipe.res.txt @@ -1,7 +1,7 @@ -let s1 = @ann x->foo +let s1 = @ann (x->foo) let s1b = (@ann x)->foo -let s2 = @ann x |> foo +let s2 = @ann (x |> foo) let s2b = (@ann x) |> foo let s3 = @ann (x ** foo)