Skip to content

Commit 57c612b

Browse files
committed
Support package access in NoAccessLevelOnExtensionDeclaration.
1 parent 62390f6 commit 57c612b

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

Sources/SwiftFormat/Core/ModifierListSyntax+Convenience.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ extension DeclModifierListSyntax {
1717
var accessLevelModifier: DeclModifierSyntax? {
1818
for modifier in self {
1919
switch modifier.name.tokenKind {
20-
case .keyword(.public), .keyword(.private), .keyword(.fileprivate), .keyword(.internal):
20+
case .keyword(.public), .keyword(.private), .keyword(.fileprivate), .keyword(.internal),
21+
.keyword(.package):
2122
return modifier
2223
default:
2324
continue

Sources/SwiftFormat/Rules/NoAccessLevelOnExtensionDeclaration.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public final class NoAccessLevelOnExtensionDeclaration: SyntaxFormatRule {
3232
var result = node
3333

3434
switch keyword {
35-
// Public, private, or fileprivate keywords need to be moved to members
36-
case .public, .private, .fileprivate:
35+
// Public, private, fileprivate, or package keywords need to be moved to members
36+
case .public, .private, .fileprivate, .package:
3737
// The effective access level of the members of a `private` extension is `fileprivate`, so
3838
// we have to update the keyword to ensure that the result is correct.
3939
var accessKeywordToAdd = accessKeyword

Tests/SwiftFormatTests/Rules/NoAccessLevelOnExtensionDeclarationTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,31 @@ final class NoAccessLevelOnExtensionDeclarationTests: LintOrFormatRuleTestCase {
128128
)
129129
}
130130

131+
func testPackageAccessLevel() {
132+
assertFormatting(
133+
NoAccessLevelOnExtensionDeclaration.self,
134+
input: """
135+
1️⃣package extension Foo {
136+
2️⃣func f() {}
137+
}
138+
""",
139+
expected: """
140+
extension Foo {
141+
package func f() {}
142+
}
143+
""",
144+
findings: [
145+
FindingSpec(
146+
"1️⃣",
147+
message: "move this 'package' access modifier to precede each member inside this extension",
148+
notes: [
149+
NoteSpec("2️⃣", message: "add 'package' access modifier to this declaration"),
150+
]
151+
),
152+
]
153+
)
154+
}
155+
131156
func testPrivateIsEffectivelyFileprivate() {
132157
assertFormatting(
133158
NoAccessLevelOnExtensionDeclaration.self,

0 commit comments

Comments
 (0)