diff --git a/jscomp/syntax/src/res_printer.ml b/jscomp/syntax/src/res_printer.ml index abd0811093..d8167ff61c 100644 --- a/jscomp/syntax/src/res_printer.ml +++ b/jscomp/syntax/src/res_printer.ml @@ -3585,12 +3585,25 @@ and printBinaryExpression ~state (expr : Parsetree.expression) cmtTbl = Doc.rparen; ] else - Doc.concat - [ - leftPrinted; - printBinaryOperator ~inlineRhs:false operator; - rightPrinted; - ] + match operator with + | "|." | "|.u" -> + Doc.concat + [ + leftPrinted; + Doc.breakableGroup ~forceBreak:true + (Doc.concat + [ + printBinaryOperator ~inlineRhs:false operator; + rightPrinted; + ]); + ] + | _ -> + Doc.concat + [ + leftPrinted; + printBinaryOperator ~inlineRhs:false operator; + rightPrinted; + ] in let doc = diff --git a/jscomp/syntax/tests/conversion/reason/expected/attributes.res.txt b/jscomp/syntax/tests/conversion/reason/expected/attributes.res.txt index ff549e3e6d..08a182d190 100644 --- a/jscomp/syntax/tests/conversion/reason/expected/attributes.res.txt +++ b/jscomp/syntax/tests/conversion/reason/expected/attributes.res.txt @@ -12,7 +12,10 @@ module Color: { @send external map: (array<'a>, 'a => 'b) => array<'b> = "map" @send external filter: (array<'a>, 'a => 'b) => array<'b> = "filter" -list{1, 2, 3}->map(a => a + 1)->filter(a => modulo(a, 2) == 0)->Js.log +list{1, 2, 3} +->map(a => a + 1) +->filter(a => modulo(a, 2) == 0) +->Js.log type t @new external make: unit => t = "DOMParser" diff --git a/jscomp/syntax/tests/conversion/reason/expected/bracedJsx.res.txt b/jscomp/syntax/tests/conversion/reason/expected/bracedJsx.res.txt index b49e82fece..88ddcbb4ec 100644 --- a/jscomp/syntax/tests/conversion/reason/expected/bracedJsx.res.txt +++ b/jscomp/syntax/tests/conversion/reason/expected/bracedJsx.res.txt @@ -99,7 +99,11 @@ let make = () => { switch containerRef.current->Js.Nullable.toOption { | Some(containerRef) => open Webapi.Dom - containerRef->Element.setScrollTop(containerRef->Element.scrollHeight->float_of_int) + containerRef->Element.setScrollTop( + containerRef + ->Element.scrollHeight + ->float_of_int, + ) | None => () } None diff --git a/jscomp/syntax/tests/conversion/reason/expected/braces.res.txt b/jscomp/syntax/tests/conversion/reason/expected/braces.res.txt index 0a3e335d63..0d0a51bbff 100644 --- a/jscomp/syntax/tests/conversion/reason/expected/braces.res.txt +++ b/jscomp/syntax/tests/conversion/reason/expected/braces.res.txt @@ -3,7 +3,10 @@ let f = () => id if isArray(children) { // Scenario 1 - let code = children->asStringArray->Js.Array2.joinWith("") + let code = + children + ->asStringArray + ->Js.Array2.joinWith("") {code->s} } else if isObject(children) { // Scenario 2 diff --git a/jscomp/syntax/tests/conversion/reason/expected/fastPipe.res.txt b/jscomp/syntax/tests/conversion/reason/expected/fastPipe.res.txt index a7007b68b5..aec2384e02 100644 --- a/jscomp/syntax/tests/conversion/reason/expected/fastPipe.res.txt +++ b/jscomp/syntax/tests/conversion/reason/expected/fastPipe.res.txt @@ -1,18 +1,32 @@ -a->f(b, c)->g(d, e) +a +->f(b, c) +->g(d, e) Element.querySelectorAll(selector, element) ->NodeList.toArray ->Array.keepMap(Element.ofNode) ->Array.getBy(node => node->Element.textContent === content) -let x = @attr ((@attr2 a)->f(b)->c(d)) +let x = + @attr + ( + (@attr2 a) + ->f(b) + ->c(d) + ) 5->doStuff(3, _, 7) (event->target)["value"] -(Route.urlToRoute(url)->ChangeView->self).send -Route.urlToRoute(url)->ChangeView->self.send +( + Route.urlToRoute(url) + ->ChangeView + ->self +).send +Route.urlToRoute(url) +->ChangeView +->self.send let aggregateTotal = (forecast, ~audienceType) => Js.Nullable.toOption(forecast["audiences"]) diff --git a/jscomp/syntax/tests/ppx/react/expected/interfaceWithRef.res.txt b/jscomp/syntax/tests/ppx/react/expected/interfaceWithRef.res.txt index dbb6acfd5e..01877779ce 100644 --- a/jscomp/syntax/tests/ppx/react/expected/interfaceWithRef.res.txt +++ b/jscomp/syntax/tests/ppx/react/expected/interfaceWithRef.res.txt @@ -3,7 +3,10 @@ let make = ( {x, _}: props, ref: Js.Nullable.t, ) => { - let _ = ref->Js.Nullable.toOption->Belt.Option.map(ReactDOM.Ref.domRef) + let _ = + ref + ->Js.Nullable.toOption + ->Belt.Option.map(ReactDOM.Ref.domRef) React.string(x) } let make = React.forwardRef({ diff --git a/jscomp/syntax/tests/printer/expr/expected/binary.res.txt b/jscomp/syntax/tests/printer/expr/expected/binary.res.txt index a699c3261f..9702448b62 100644 --- a/jscomp/syntax/tests/printer/expr/expected/binary.res.txt +++ b/jscomp/syntax/tests/printer/expr/expected/binary.res.txt @@ -453,10 +453,16 @@ a && (b && (c && d)) (a && b) || c a && (b || c) -x->(y->z) -x->(y->(z->w)) +x +->(y +->z) +x +->(y +->(z->w)) x->(y && (w && z)) -x->y->z +x +->y +->z x |> y |> z x |> (y |> z) diff --git a/jscomp/syntax/tests/printer/expr/expected/callback.res.txt b/jscomp/syntax/tests/printer/expr/expected/callback.res.txt index 50393c396b..21fe22185b 100644 --- a/jscomp/syntax/tests/printer/expr/expected/callback.res.txt +++ b/jscomp/syntax/tests/printer/expr/expected/callback.res.txt @@ -36,7 +36,10 @@ let make = (arr, ~compare) => { let tbl = data->Js.Array2.reduce((map, curr) => { let (website, user) = curr if map->Belt.Map.String.has(website) { - let set = map->Belt.Map.String.getExn(website)->Belt.Set.Int.add(user) + let set = + map + ->Belt.Map.String.getExn(website) + ->Belt.Set.Int.add(user) map->Belt.Map.String.set(website, set) } else { let set = Belt.Set.Int.empty->Belt.Set.Int.add(user) @@ -50,7 +53,10 @@ let _ = { let tbl = data->Js.Array2.reduce((map, curr) => { let (website, user) = curr if map->Belt.Map.String.has(website) { - let set = map->Belt.Map.String.getExn(website)->Belt.Set.Int.add(user) + let set = + map + ->Belt.Map.String.getExn(website) + ->Belt.Set.Int.add(user) map->Belt.Map.String.set(website, set) } else { let set = Belt.Set.Int.empty->Belt.Set.Int.add(user) @@ -65,7 +71,10 @@ let trees = combination->Belt.Array.reduceU(Nil, (. tree, curr) => tree->insert(curr)) ) -let set = mapThatHasAVeryLongName->Belt.Map.String.getExn(website)->Belt.Set.Int.add(user) +let set = + mapThatHasAVeryLongName + ->Belt.Map.String.getExn(website) + ->Belt.Set.Int.add(user) let add = (y: coll, e: key) => if List.exists(x => eq(x, e), y) { @@ -215,13 +224,16 @@ let f = () => { } -myPromise->Js.Promise.then_(value => { +myPromise +->Js.Promise.then_(value => { Js.log(value) Js.Promise.resolve(value + 2) -}, _)->Js.Promise.then_(value => { +}, _) +->Js.Promise.then_(value => { Js.log(value) Js.Promise.resolve(value + 3) -}, _)->Js.Promise.catch(err => { +}, _) +->Js.Promise.catch(err => { Js.log2("Failure!!", err) Js.Promise.resolve(-2) }, _) diff --git a/jscomp/syntax/tests/printer/expr/expected/firstClassModule.res.txt b/jscomp/syntax/tests/printer/expr/expected/firstClassModule.res.txt index 995769b809..65071e2656 100644 --- a/jscomp/syntax/tests/printer/expr/expected/firstClassModule.res.txt +++ b/jscomp/syntax/tests/printer/expr/expected/firstClassModule.res.txt @@ -8,21 +8,29 @@ let x = @attr module(Foo) let x = @attr module(Foo: FirstClass) module(Teenager)[0] -module(Teenager)->age->Js.log +module(Teenager) +->age +->Js.log module(Teenager)[0]->Js.log -module(Teenager)->age->isAdult +module(Teenager) +->age +->isAdult ? Js.log("has responsibilities") : Js.log("can play in the playground") module(Streets)[0]->isExpensive ? Js.log("big money") : Js.log("affordable") let () = { - module(Teenager)->age->Js.log + module(Teenager) + ->age + ->Js.log } let () = { module(Teenager)[0] } let () = { - module(Teenager)->age->isAdult + module(Teenager) + ->age + ->isAdult ? Js.log("has responsibilities") : Js.log("can play in the playground") } @@ -34,14 +42,20 @@ let () = { let a = 1 let b = 2 module(Teenager)[0] - module(Teenager)->age->Js.log + module(Teenager) + ->age + ->Js.log } let () = { let a = 1 let b = 2 - module(Teenager)->age->Js.log - module(Teenager)[0]->age->isAdult + module(Teenager) + ->age + ->Js.log + module(Teenager)[0] + ->age + ->isAdult ? Js.log("has responsibilities") : Js.log("can play in the playground") } diff --git a/jscomp/syntax/tests/printer/expr/expected/jsx.res.txt b/jscomp/syntax/tests/printer/expr/expected/jsx.res.txt index 35f7b9ef58..49e2eb0d95 100644 --- a/jscomp/syntax/tests/printer/expr/expected/jsx.res.txt +++ b/jscomp/syntax/tests/printer/expr/expected/jsx.res.txt @@ -321,7 +321,9 @@ module App = { amount={ // ->BN.new_("86400") // There are 86400 seconds in a day. - amount->BN.div(BN.new_("86400"))->BN.toString + amount + ->BN.div(BN.new_("86400")) + ->BN.toString } /> diff --git a/jscomp/syntax/tests/printer/other/expected/fatSlider.res.txt b/jscomp/syntax/tests/printer/other/expected/fatSlider.res.txt index 6e065f0ac4..2a3ad2aaf4 100644 --- a/jscomp/syntax/tests/printer/other/expected/fatSlider.res.txt +++ b/jscomp/syntax/tests/printer/other/expected/fatSlider.res.txt @@ -50,7 +50,9 @@ let make = (~min=50, ~max=250, ~meterSuffix=?) => { />
- {values[0]->Js.Int.toString->string} + {values[0] + ->Js.Int.toString + ->string} {meterSuffix->Belt.Option.getWithDefault(null)}
diff --git a/jscomp/syntax/tests/printer/other/expected/nesting.res.txt b/jscomp/syntax/tests/printer/other/expected/nesting.res.txt index 0cafca836c..59a8fa17d6 100644 --- a/jscomp/syntax/tests/printer/other/expected/nesting.res.txt +++ b/jscomp/syntax/tests/printer/other/expected/nesting.res.txt @@ -41,9 +41,13 @@ let unitsCommands = state.units->Js.Array2.mapi(( ), coordinates: {x: sparksX, y: sparksY, z: 0.}, } - particlesToAdd->Js.Array2.push(spark)->ignore + particlesToAdd + ->Js.Array2.push(spark) + ->ignore - res->Js.Array2.push(Unit.CommandAttacked({damage: damage}))->ignore + res + ->Js.Array2.push(Unit.CommandAttacked({damage: damage})) + ->ignore } | _ => () } diff --git a/jscomp/syntax/tests/printer/other/expected/signaturePicker.res.txt b/jscomp/syntax/tests/printer/other/expected/signaturePicker.res.txt index f73d98b8cb..c7f1c33951 100644 --- a/jscomp/syntax/tests/printer/other/expected/signaturePicker.res.txt +++ b/jscomp/syntax/tests/printer/other/expected/signaturePicker.res.txt @@ -32,7 +32,9 @@ let make = () => { {options ->Belt.List.map(option => ) ->Belt.List.toArray