Skip to content

Commit ceb1fa2

Browse files
jopricenojaf
andauthored
fix idempotency for single case union w/o pipe (#3116)
* fix idempotency for single case union w/o pipe * update changelog * Avoid indexed list access. * Add new version --------- Co-authored-by: nojaf <[email protected]>
1 parent 87a6577 commit ceb1fa2

File tree

3 files changed

+54
-10
lines changed

3 files changed

+54
-10
lines changed

Diff for: CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## 6.3.13 - 2024-09-10
4+
5+
### Fixed
6+
* Idempotency problem when adding members to a single case union without a pipe [#3102](https://github.com/fsprojects/fantomas/issues/3102)
7+
38
## 6.3.12 - 2024-09-05
49

510
### Fixed

Diff for: src/Fantomas.Core.Tests/TypeDeclarationTests.fs

+39
Original file line numberDiff line numberDiff line change
@@ -3643,3 +3643,42 @@ type FSharpChecker with
36433643
: Async<(FSharpParseFileResults * ParsedInput * FSharpCheckFileResults) option> =
36443644
()
36453645
"""
3646+
3647+
[<Test>]
3648+
let ``single member union extensions without pipe, 3102`` () =
3649+
formatSourceString
3650+
"""
3651+
type X = X
3652+
with
3653+
static member x = 1
3654+
"""
3655+
config
3656+
|> prepend newline
3657+
|> should
3658+
equal
3659+
"""
3660+
type X = X
3661+
with
3662+
3663+
static member x = 1
3664+
"""
3665+
3666+
[<Test>]
3667+
let ``single member union extensions without pipe idempotent, 3102`` () =
3668+
formatSourceString
3669+
"""
3670+
type X = X
3671+
with
3672+
3673+
static member x = 1
3674+
"""
3675+
config
3676+
|> prepend newline
3677+
|> should
3678+
equal
3679+
"""
3680+
type X = X
3681+
with
3682+
3683+
static member x = 1
3684+
"""

Diff for: src/Fantomas.Core/CodePrinter.fs

+10-10
Original file line numberDiff line numberDiff line change
@@ -3585,16 +3585,16 @@ let genTypeDefn (td: TypeDefn) =
35853585
| _ ->
35863586
header
35873587
+> sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth (genType node.Type)
3588-
+> onlyIf
3589-
hasMembers
3590-
(optSingle
3591-
(fun withNode ->
3592-
indentSepNlnUnindent (
3593-
genSingleTextNode withNode
3594-
+> onlyIfCtx (fun ctx -> ctx.Config.NewlineBetweenTypeDefinitionAndMembers) sepNln
3595-
+> indentSepNlnUnindent (genMemberDefnList members)
3596-
))
3597-
typeName.WithKeyword)
3588+
+> (match List.tryHead members, typeName.WithKeyword with
3589+
| Some firstMember, Some withNode ->
3590+
indentSepNlnUnindent (
3591+
genSingleTextNode withNode
3592+
+> onlyIfCtx
3593+
(fun ctx -> ctx.Config.NewlineBetweenTypeDefinitionAndMembers)
3594+
(sepNlnUnlessContentBefore (MemberDefn.Node firstMember))
3595+
+> indentSepNlnUnindent (genMemberDefnList members)
3596+
)
3597+
| _ -> sepNone)
35983598
|> genNode node)
35993599
ctx
36003600
| TypeDefn.Explicit node ->

0 commit comments

Comments
 (0)