From df6f31d7c6c57a487b8962e488b43448eb5b69dd Mon Sep 17 00:00:00 2001 From: nojaf Date: Fri, 13 Sep 2019 08:34:41 +0200 Subject: [PATCH] Keep parentheses around dynamic operator ident, fixes #476 --- src/Fantomas.Tests/DynamicOperatorTests.fs | 17 +++++++++++++++++ src/Fantomas/CodePrinter.fs | 9 +++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Fantomas.Tests/DynamicOperatorTests.fs b/src/Fantomas.Tests/DynamicOperatorTests.fs index 0776d0627d..d62f9b9518 100644 --- a/src/Fantomas.Tests/DynamicOperatorTests.fs +++ b/src/Fantomas.Tests/DynamicOperatorTests.fs @@ -15,3 +15,20 @@ let ``Remove () when dynamic operator is string``() = formatSourceString false "let memoEquals x = x?k" config |> should equal """let memoEquals x = x?k """ + +[] +let ``keep () when dynamic operator inside boolean expr, #476`` () = + formatSourceString false """let fieldColor (fieldNameX: string) = + if f.errors?(fieldNameY) && f.touched?(fieldNameZ) then + IsDanger + else + NoColor + |> Input.Color +""" config + |> prepend newline + |> should equal """ +let fieldColor (fieldNameX: string) = + if f.errors?(fieldNameY) && f.touched?(fieldNameZ) then IsDanger + else NoColor + |> Input.Color +""" \ No newline at end of file diff --git a/src/Fantomas/CodePrinter.fs b/src/Fantomas/CodePrinter.fs index 9cc0392d70..31dff7af48 100644 --- a/src/Fantomas/CodePrinter.fs +++ b/src/Fantomas/CodePrinter.fs @@ -1144,8 +1144,13 @@ and genInfixApps astContext hasNewLine synExprs = | (s, opE, e)::es when(hasNewLine) -> (sepNln +> tok opE.Range s +> sepSpace +> genExpr astContext e) +> genInfixApps astContext (hasNewLine || checkNewLine e es) es - | (s, opE, e)::es when(NoSpaceInfixOps.Contains s) -> - (tok opE.Range s +> autoNln (genExpr astContext e)) + | (s, opE, e)::es when(NoSpaceInfixOps.Contains s) -> + let wrapExpr f = + match synExprs with + | ("?", SynExpr.Ident(Ident("op_Dynamic")), SynExpr.Ident(_))::_ -> + sepOpenT +> f +> sepCloseT + | _ -> f + (tok opE.Range s +> autoNln (wrapExpr (genExpr astContext e))) +> genInfixApps astContext (hasNewLine || checkNewLine e es) es | (s, opE, e)::es -> (sepSpace +> autoNln (tok opE.Range s +> sepSpace +> genCommentsAfterInfix (Some opE.Range) +> genExpr astContext e))