Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

### Fixed
* Comment no longer attached to autoproperty. [#2948](https://github.com/fsprojects/fantomas/issues/2948)
* `begin`/`end` are replaced with parens. [#2368](https://github.com/fsprojects/fantomas/issues/2368)

## 6.1.3 - 2023-08-25

Expand Down
52 changes: 52 additions & 0 deletions src/Fantomas.Core.Tests/BeginEndTests.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
module Fantomas.Core.Tests.BeginEndTests

open NUnit.Framework
open FsUnit
open Fantomas.Core.Tests.TestHelpers

[<Test>]
let ``detect begin end from SynExpr.Paren, 2368`` () =
formatSourceString
false
"""
do
begin 1 end
"""
config
|> prepend newline
|> should
equal
"""
do begin 1 end
"""

[<Test>]
let ``multiline begin end in expression`` () =
formatSourceString
false
"""
do
let a = 1
begin
use b = f ()
()
end
let c = 2
()
"""
config
|> prepend newline
|> should
equal
"""
do
let a = 1

begin
use b = f ()
()
end

let c = 2
()
"""
1 change: 1 addition & 0 deletions src/Fantomas.Core.Tests/Fantomas.Core.Tests.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
<Compile Include="ParenthesesTests.fs" />
<Compile Include="DotLambdaTests.fs" />
<Compile Include="ConstraintIntersectionTests.fs" />
<Compile Include="BeginEndTests.fs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Fantomas.Core\Fantomas.Core.fsproj" />
Expand Down
10 changes: 9 additions & 1 deletion src/Fantomas.Core/ASTTransformer.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1165,7 +1165,15 @@ let mkExpr (creationAide: CreationAide) (e: SynExpr) : Expr =
| SynExpr.LongIdent(longDotId = SynLongIdent([ ident ], [], [ Some(ParenStarSynIdent(lpr, originalNotation, rpr)) ])) ->
ExprParenFunctionNameWithStarNode(stn "(" lpr, stn originalNotation ident.idRange, stn ")" rpr, exprRange)
|> Expr.ParenFunctionNameWithStar
| ParenExpr(lpr, e, rpr, pr) -> mkParenExpr creationAide lpr e rpr pr |> Expr.Paren
| ParenExpr(lpr, e, rpr, pr) ->
let hasBeginKeyword = (lpr.EndColumn - lpr.StartColumn) = 5
let hasEndKeyword = (rpr.EndColumn - rpr.StartColumn) = 3

if hasBeginKeyword && hasEndKeyword then
ExprBeginEndNode(stn "begin" lpr, mkExpr creationAide e, stn "end" rpr, pr)
|> Expr.BeginEnd
else
mkParenExpr creationAide lpr e rpr pr |> Expr.Paren
| SynExpr.Dynamic(funcExpr, _, argExpr, _) ->
ExprDynamicNode(mkExpr creationAide funcExpr, mkExpr creationAide argExpr, exprRange)
|> Expr.Dynamic
Expand Down
15 changes: 15 additions & 0 deletions src/Fantomas.Core/CodePrinter.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1596,6 +1596,21 @@ let genExpr (e: Expr) =
+> genSingleTextNode node.Dot
+> genExpr node.Expr
|> genNode node
| Expr.BeginEnd node ->
let short =
genSingleTextNode node.Begin
+> sepSpace
+> genExpr node.Expr
+> sepSpace
+> genSingleTextNode node.End

let long =
genSingleTextNode node.Begin
+> indentSepNlnUnindent (genExpr node.Expr)
+> sepNln
+> genSingleTextNode node.End

expressionFitsOnRestOfLine short long |> genNode node

let genQuoteExpr (node: ExprQuoteNode) =
genSingleTextNode node.OpenToken
Expand Down
10 changes: 10 additions & 0 deletions src/Fantomas.Core/SyntaxOak.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1624,6 +1624,14 @@ type ExprDotLambda(underscore: SingleTextNode, dot: SingleTextNode, expr: Expr,
member val Dot = dot
member val Expr = expr

type ExprBeginEndNode(beginNode: SingleTextNode, expr: Expr, endNode: SingleTextNode, range) =
inherit NodeBase(range)
override val Children: Node array = [| yield beginNode; yield Expr.Node expr; yield endNode |]

member val Begin = beginNode
member val Expr = expr
member val End = endNode

[<RequireQualifiedAccess; NoEquality; NoComparison>]
type Expr =
| Lazy of ExprLazyNode
Expand Down Expand Up @@ -1689,6 +1697,7 @@ type Expr =
| Typar of SingleTextNode
| Chain of ExprChain
| DotLambda of ExprDotLambda
| BeginEnd of ExprBeginEndNode

static member Node(x: Expr) : Node =
match x with
Expand Down Expand Up @@ -1755,6 +1764,7 @@ type Expr =
| Typar n -> n
| Chain n -> n
| DotLambda n -> n
| BeginEnd n -> n

member e.HasParentheses: bool =
match e with
Expand Down