Skip to content

Commit da7b3a4

Browse files
authored
Merge pull request swiftlang#198 from google/format-fix-extension-leading-trivia
Keep leading trivia when removing extension modifier.
2 parents 1ad78e3 + 88008be commit da7b3a4

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

Sources/SwiftFormatRules/NoAccessLevelOnExtensionDeclaration.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@ public final class NoAccessLevelOnExtensionDeclaration: SyntaxFormatRule {
4040
leftBrace: node.members.leftBrace,
4141
members: addMemberAccessKeywords(memDeclBlock: node.members, keyword: accessKeyword),
4242
rightBrace: node.members.rightBrace)
43+
let newKeyword = replaceTrivia(on: node.extensionKeyword,
44+
token: node.extensionKeyword,
45+
leadingTrivia: accessKeyword.leadingTrivia) as! TokenSyntax
4346
return node.withMembers(newMembers)
44-
.withModifiers(modifiers.remove(name: accessKeyword.name.text))
47+
.withModifiers(modifiers.remove(name: accessKeyword.name.text))
48+
.withExtensionKeyword(newKeyword)
4549
// Internal keyword redundant, delete
4650
case .internalKeyword:
4751
diagnose(.removeRedundantAccessKeyword(name: node.extendedType.description),

Tests/SwiftFormatRulesTests/NoAccessLevelOnExtensionDeclarationTests.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,42 @@ public class NoAccessLevelOnExtensionDeclarationTests: DiagnosingTestCase {
4949
)
5050
}
5151

52+
public func testPreservesCommentOnRemovedModifier() {
53+
XCTAssertFormatting(
54+
NoAccessLevelOnExtensionDeclaration.self,
55+
input: """
56+
/// This doc comment should stick around.
57+
public extension Foo {
58+
func f() {}
59+
// This should not change.
60+
func g() {}
61+
}
62+
63+
/// So should this one.
64+
internal extension Foo {
65+
func f() {}
66+
// This should not change.
67+
func g() {}
68+
}
69+
""",
70+
expected: """
71+
/// This doc comment should stick around.
72+
extension Foo {
73+
public func f() {}
74+
// This should not change.
75+
public func g() {}
76+
}
77+
78+
/// So should this one.
79+
extension Foo {
80+
func f() {}
81+
// This should not change.
82+
func g() {}
83+
}
84+
"""
85+
)
86+
}
87+
5288
#if !os(macOS)
5389
static let allTests = [
5490
NoAccessLevelOnExtensionDeclarationTests.testExtensionDeclarationAccessLevel,

0 commit comments

Comments
 (0)