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 @@ -9,6 +9,7 @@
* Unit is lost inside dot get chain. [#2683](https://github.com/fsprojects/fantomas/issues/2683)
* Piped multiline application is indented too far. [#2682](https://github.com/fsprojects/fantomas/issues/2682)
* Comment not assigned to first parameter in constructor. [#2692](https://github.com/fsprojects/fantomas/issues/2692)
* Stroustrup: Type alias for anonymous record type. [#2179](https://github.com/fsprojects/fantomas/issues/2179)

## [5.2.0-beta-001] - 2023-01-02

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,28 @@ type V = {
}
"""

[<Test>]
let ``anonymous record type alias`` () =
formatSourceString
false
"""
type V =
{| X: SomeFieldType
Y: OhSomethingElse
Z: ALongTypeName |}
"""
config
|> prepend newline
|> should
equal
"""
type V = {|
X: SomeFieldType
Y: OhSomethingElse
Z: ALongTypeName
|}
"""

[<Test>]
[<Ignore("See https://github.com/fsprojects/fantomas/issues/2001, this will be easier to fix in future FCS version")>]
let ``record type definition with comment after equals`` () =
Expand Down
34 changes: 21 additions & 13 deletions src/Fantomas.Core/CodePrinter.fs
Original file line number Diff line number Diff line change
Expand Up @@ -3351,19 +3351,27 @@ let genTypeDefn (td: TypeDefn) =
| TypeDefn.Abbrev node ->
let hasMembers = List.isNotEmpty members

header
+> sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth (genType node.Type)
+> onlyIf
hasMembers
(optSingle
(fun withNode ->
indentSepNlnUnindent (
genSingleTextNode withNode
+> onlyIfCtx (fun ctx -> ctx.Config.NewlineBetweenTypeDefinitionAndMembers) sepNln
+> indentSepNlnUnindent (genMemberDefnList members)
))
typeName.WithKeyword)
|> genNode node
fun (ctx: Context) ->
(match node.Type with
| Type.AnonRecord _ when not hasMembers && ctx.Config.ExperimentalStroustrupStyle ->
header
+> sepSpaceOrIndentAndNlnIfTypeExceedsPageWidthUnlessStroustrup genType node.Type
|> genNode node
| _ ->
header
+> sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth (genType node.Type)
+> onlyIf
hasMembers
(optSingle
(fun withNode ->
indentSepNlnUnindent (
genSingleTextNode withNode
+> onlyIfCtx (fun ctx -> ctx.Config.NewlineBetweenTypeDefinitionAndMembers) sepNln
+> indentSepNlnUnindent (genMemberDefnList members)
))
typeName.WithKeyword)
|> genNode node)
ctx
| TypeDefn.Explicit node ->
let bodyNode = node.Body

Expand Down
20 changes: 10 additions & 10 deletions src/Fantomas.Core/Context.fs
Original file line number Diff line number Diff line change
Expand Up @@ -746,21 +746,21 @@ let sepSpaceOrDoubleIndentAndNlnIfExpressionExceedsPageWidth expr (ctx: Context)
expr
ctx

let sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup
(f: Expr -> Context -> Context)
(expr: Expr)
(ctx: Context)
=
let node = Expr.Node expr

let sepSpaceOrIndentAndNlnIfExceedsPageWidthUnlessStroustrup isStroustrup f (node: Node) (ctx: Context) =
if
ctx.Config.ExperimentalStroustrupStyle
&& expr.IsStroustrupStyleExpr
&& isStroustrup
&& Seq.isEmpty node.ContentBefore
then
(sepSpace +> f expr) ctx
(sepSpace +> f) ctx
else
sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth (f expr) ctx
sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth f ctx

let sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup f (expr: Expr) =
sepSpaceOrIndentAndNlnIfExceedsPageWidthUnlessStroustrup expr.IsStroustrupStyleExpr (f expr) (Expr.Node expr)

let sepSpaceOrIndentAndNlnIfTypeExceedsPageWidthUnlessStroustrup f (t: Type) =
sepSpaceOrIndentAndNlnIfExceedsPageWidthUnlessStroustrup t.IsStroustrupStyleType (f t) (Type.Node t)

let autoNlnIfExpressionExceedsPageWidth expr (ctx: Context) =
expressionExceedsPageWidth
Expand Down
5 changes: 4 additions & 1 deletion src/Fantomas.Core/Context.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,10 @@ val sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidth: expr: (Context -> Contex
val sepSpaceOrDoubleIndentAndNlnIfExpressionExceedsPageWidth: expr: (Context -> Context) -> ctx: Context -> Context

val sepSpaceOrIndentAndNlnIfExpressionExceedsPageWidthUnlessStroustrup:
f: (Expr -> Context -> Context) -> expr: Expr -> ctx: Context -> Context
f: (Expr -> Context -> Context) -> expr: Expr -> (Context -> Context)

val sepSpaceOrIndentAndNlnIfTypeExceedsPageWidthUnlessStroustrup:
f: (Type -> Context -> Context) -> t: Type -> (Context -> Context)

val autoParenthesisIfExpressionExceedsPageWidth: expr: (Context -> Context) -> ctx: Context -> Context
val futureNlnCheck: f: (Context -> Context) -> ctx: Context -> bool
Expand Down