@@ -27,16 +27,8 @@ public class CodeGenerationFormat: BasicFormat {
2727 }
2828 }
2929
30- public override func visit( _ node: MemberDeclBlockSyntax ) -> MemberDeclBlockSyntax {
31- if node. members. count == 0 {
32- return node. with ( \. leftBrace, . leftBraceToken( ) )
33- } else {
34- return super. visit ( node)
35- }
36- }
37-
3830 public override func visit( _ node: CodeBlockItemSyntax ) -> CodeBlockItemSyntax {
39- if node. parent? . parent? . is ( SourceFileSyntax . self) == true , !node . item . is ( ImportDeclSyntax . self ) {
31+ if node. parent? . parent? . is ( SourceFileSyntax . self) == true , !shouldBeSeparatedByTwoNewlines ( node : node ) {
4032 let formatted = super. visit ( node)
4133 return ensuringTwoLeadingNewlines ( node: formatted)
4234 } else {
@@ -64,9 +56,17 @@ public class CodeGenerationFormat: BasicFormat {
6456 }
6557 }
6658
59+ public override func visit( _ node: MemberDeclBlockSyntax ) -> MemberDeclBlockSyntax {
60+ if node. members. count == 0 {
61+ return node. with ( \. leftBrace, . leftBraceToken( ) )
62+ } else {
63+ return super. visit ( node)
64+ }
65+ }
66+
6767 public override func visit( _ node: MemberDeclListItemSyntax ) -> MemberDeclListItemSyntax {
6868 let formatted = super. visit ( node)
69- if node. indexInParent != 0 {
69+ if node. indexInParent != 0 && !node . decl . is ( EnumCaseDeclSyntax . self ) {
7070 return ensuringTwoLeadingNewlines ( node: formatted)
7171 } else {
7272 return formatted
@@ -85,6 +85,12 @@ public class CodeGenerationFormat: BasicFormat {
8585
8686 // MARK: - Private
8787
88+ private func shouldBeSeparatedByTwoNewlines( node: CodeBlockItemSyntax ) -> Bool {
89+ // First item in the `CodeBlockItemListSyntax` don't need a newline or identation if the parent is a `SourceFileSyntax`.
90+ // We want to group imports so newline between them should be omitted
91+ return node. parent? . as ( CodeBlockItemListSyntax . self) ? . first == node || node. item. is ( ImportDeclSyntax . self)
92+ }
93+
8894 private func ensuringTwoLeadingNewlines< NodeType: SyntaxProtocol > ( node: NodeType ) -> NodeType {
8995 if node. leadingTrivia? . first? . isNewline ?? false {
9096 return node. with ( \. leadingTrivia, indentedNewline + ( node. leadingTrivia ?? [ ] ) )
0 commit comments