From a4512552528f06b0fe477756a1f0277363330695 Mon Sep 17 00:00:00 2001 From: nojaf Date: Tue, 10 Dec 2024 13:11:27 +0100 Subject: [PATCH 1/3] Add active pattern for empty computation expression --- .../ComputationExpressionTests.fs | 15 +++++++++++++++ src/Fantomas.Core/ASTTransformer.fs | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/Fantomas.Core.Tests/ComputationExpressionTests.fs b/src/Fantomas.Core.Tests/ComputationExpressionTests.fs index 31c1a96c7..548c54e55 100644 --- a/src/Fantomas.Core.Tests/ComputationExpressionTests.fs +++ b/src/Fantomas.Core.Tests/ComputationExpressionTests.fs @@ -1,5 +1,6 @@ module Fantomas.Core.Tests.ComputationExpressionTests +open Internal.Utilities.Library.Extras open NUnit.Framework open FsUnit open Fantomas.Core.Tests.TestHelpers @@ -2453,3 +2454,17 @@ let zero = async { () } // foo |> ignore """ + +[] +let ``empty computation expression with application`` () = + formatSourceString + """ +A() {} +""" + config + |> prepend newline + |> should + equal + """ +A() { } +""" diff --git a/src/Fantomas.Core/ASTTransformer.fs b/src/Fantomas.Core/ASTTransformer.fs index 93240f743..f1c4d9784 100644 --- a/src/Fantomas.Core/ASTTransformer.fs +++ b/src/Fantomas.Core/ASTTransformer.fs @@ -455,6 +455,15 @@ let (|IndexWithoutDot|_|) expr = Some(identifierExpr, indexExpr) | _ -> None +let (|EmptyComputationExpr|_|) expr = + match expr with + | SynExpr.App(ExprAtomicFlag.NonAtomic, + false, + funcExpr, + SynExpr.Record(recordFields = []; range = StartEndRange 1 (mOpen, _, mClose)), + range) -> Some(funcExpr, mOpen, mClose, range) + | _ -> None + let (|MultipleConsInfixApps|_|) expr = let rec visit expr (headAndLastOperator: (SynExpr * SingleTextNode) option) (xs: Queue) = match expr with @@ -1252,6 +1261,16 @@ let mkExpr (creationAide: CreationAide) (e: SynExpr) : Expr = ExprIndexWithoutDotNode(mkExpr creationAide identifierExpr, mkExpr creationAide indexExpr, exprRange) |> Expr.IndexWithoutDot + | EmptyComputationExpr(expr, mOpen, mClose, m) -> + ExprNamedComputationNode( + mkExpr creationAide expr, + stn "{" mOpen, + Expr.Ident(stn "" Range.Zero), + stn "}" mClose, + m + ) + |> Expr.NamedComputation + | ChainExpr links -> let chainLinks = links From ba6f80d5f0a955c00d43e6b2fded967f6014bfb0 Mon Sep 17 00:00:00 2001 From: nojaf Date: Tue, 10 Dec 2024 14:03:08 +0100 Subject: [PATCH 2/3] Comment out lex.fsi --- src/Fantomas.FCS/Fantomas.FCS.fsproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Fantomas.FCS/Fantomas.FCS.fsproj b/src/Fantomas.FCS/Fantomas.FCS.fsproj index db012a03f..dc2b8f3d4 100644 --- a/src/Fantomas.FCS/Fantomas.FCS.fsproj +++ b/src/Fantomas.FCS/Fantomas.FCS.fsproj @@ -303,9 +303,9 @@ SyntaxTree\FsLexOutput\pplex.fs - - SyntaxTree\FsLexOutput\lex.fsi - + + + SyntaxTree\FsLexOutput\lex.fs From eb3fc8f7e6c838c8f38508b7189432629e98f910 Mon Sep 17 00:00:00 2001 From: nojaf Date: Thu, 12 Dec 2024 10:55:19 +0100 Subject: [PATCH 3/3] Add changelog entry --- CHANGELOG.md | 5 +++++ src/Fantomas.Core.Tests/ComputationExpressionTests.fs | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5c2b31b7..af5acb1f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 7.0.0-alpha-004 - 2024-12-12 + +### Fixed +* (Empty/NoEmpty)-bodied named computation expression produces inconsistent formatting. [#3140](https://github.com/fsprojects/fantomas/issues/3140) + ## 7.0.0-alpha-003 - 2024-11-29 ### Removed diff --git a/src/Fantomas.Core.Tests/ComputationExpressionTests.fs b/src/Fantomas.Core.Tests/ComputationExpressionTests.fs index 548c54e55..1b7912be9 100644 --- a/src/Fantomas.Core.Tests/ComputationExpressionTests.fs +++ b/src/Fantomas.Core.Tests/ComputationExpressionTests.fs @@ -1,6 +1,5 @@ module Fantomas.Core.Tests.ComputationExpressionTests -open Internal.Utilities.Library.Extras open NUnit.Framework open FsUnit open Fantomas.Core.Tests.TestHelpers