From 0e9ed41d46da0dcbe5a30e17eaa760e45f50f88c Mon Sep 17 00:00:00 2001 From: Florian Verdonck Date: Wed, 28 Nov 2018 14:21:21 +0100 Subject: [PATCH] Add or remove () when necessary. Should fix #369 (#373) * Add or remove () when necessary. Should fix #369 * Keep () if user typed them. --- src/Fantomas.Tests/DynamicOperatorTests.fs | 17 +++++++++++++++++ src/Fantomas.Tests/Fantomas.Tests.fsproj | 1 + src/Fantomas/CodePrinter.fs | 8 +++++++- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/Fantomas.Tests/DynamicOperatorTests.fs 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)