diff --git a/src/Fantomas.Tests/DynamicOperatorTests.fs b/src/Fantomas.Tests/DynamicOperatorTests.fs new file mode 100644 index 0000000000..0776d0627d --- /dev/null +++ b/src/Fantomas.Tests/DynamicOperatorTests.fs @@ -0,0 +1,17 @@ +module Fantomas.Tests.DynamicOperatorTests + +open NUnit.Framework +open FsUnit +open Fantomas.Tests.TestHelper + +[] +let ``Keep () when dynamic operator is used``() = + formatSourceString false "let memoEquals x = x?(k + 1)" config + |> should equal """let memoEquals x = x?(k + 1) +""" + +[] +let ``Remove () when dynamic operator is string``() = + formatSourceString false "let memoEquals x = x?k" config + |> should equal """let memoEquals x = x?k +""" diff --git a/src/Fantomas.Tests/Fantomas.Tests.fsproj b/src/Fantomas.Tests/Fantomas.Tests.fsproj index d1ceb41f01..37fe0c7f0d 100644 --- a/src/Fantomas.Tests/Fantomas.Tests.fsproj +++ b/src/Fantomas.Tests/Fantomas.Tests.fsproj @@ -43,6 +43,7 @@ + diff --git a/src/Fantomas/CodePrinter.fs b/src/Fantomas/CodePrinter.fs index 57a50a9892..14c48af604 100644 --- a/src/Fantomas/CodePrinter.fs +++ b/src/Fantomas/CodePrinter.fs @@ -574,7 +574,13 @@ and genExpr astContext synExpr = !- s +> sepSpace +> sepOpenS +> genExpr { astContext with IsNakedRange = true } e +> ifElse (checkBreakForExpr e) (sepNln +> sepCloseSFixed) sepCloseS // This supposes to be an infix function, but for some reason it isn't picked up by InfixApps - | App(Var "?", e::es) -> genExpr astContext e -- "?" +> col sepSpace es (genExpr astContext) + | App(Var "?", e::es) -> + match es with + | SynExpr.Const(SynConst.String(_,_),_)::_ -> + genExpr astContext e -- "?" +> col sepSpace es (genExpr astContext) + | _ -> + genExpr astContext e -- "?" +> sepOpenT +> col sepSpace es (genExpr astContext) +> sepCloseT + | App(Var "..", [e1; e2]) -> let expr = genExpr astContext e1 -- ".." +> genExpr astContext e2 ifElse astContext.IsNakedRange expr (sepOpenS +> expr +> sepCloseS)