Skip to content

Commit 4c817ae

Browse files
committed
Migrate away from the latest deprecated APIs.
1 parent 8337523 commit 4c817ae

File tree

7 files changed

+81
-100
lines changed

7 files changed

+81
-100
lines changed

Sources/SwiftFormat/Parsing.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func parseAndEmitDiagnostics(
4646
var hasErrors = false
4747
if let parsingDiagnosticHandler = parsingDiagnosticHandler {
4848
let expectedConverter =
49-
SourceLocationConverter(file: url?.path ?? "<unknown>", tree: sourceFile)
49+
SourceLocationConverter(fileName: url?.path ?? "<unknown>", tree: sourceFile)
5050
for diagnostic in diagnostics {
5151
let location = diagnostic.location(converter: expectedConverter)
5252

Sources/SwiftFormatCore/Context.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ public final class Context {
7676
self.fileURL = fileURL
7777
self.importsXCTest = .notDetermined
7878
let tree = source.map { Parser.parse(source: $0) } ?? sourceFileSyntax
79-
self.sourceLocationConverter = SourceLocationConverter(file: fileURL.relativePath, tree: tree)
79+
self.sourceLocationConverter =
80+
SourceLocationConverter(fileName: fileURL.relativePath, tree: tree)
8081
self.ruleMask = RuleMask(
8182
syntaxNode: Syntax(sourceFileSyntax),
8283
sourceLocationConverter: sourceLocationConverter

Sources/SwiftFormatRules/AddModifierRewriter.swift

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -23,134 +23,134 @@ fileprivate final class AddModifierRewriter: SyntaxRewriter {
2323
override func visit(_ node: VariableDeclSyntax) -> DeclSyntax {
2424
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
2525
// token.
26-
guard let modifiers = node.modifiers else {
27-
let nodeWithModifier = node.addModifier(modifierKeyword)
26+
guard var modifiers = node.modifiers else {
27+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
2828
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
2929
return DeclSyntax(result)
3030
}
3131
// If variable already has an accessor keyword, skip (do not overwrite)
3232
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
3333

3434
// Put accessor keyword before the first modifier keyword in the declaration
35-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
36-
return DeclSyntax(node.with(\.modifiers, newModifiers))
35+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
36+
return DeclSyntax(node.with(\.modifiers, modifiers))
3737
}
3838

3939
override func visit(_ node: FunctionDeclSyntax) -> DeclSyntax {
4040
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
4141
// token.
42-
guard let modifiers = node.modifiers else {
43-
let nodeWithModifier = node.addModifier(modifierKeyword)
42+
guard var modifiers = node.modifiers else {
43+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
4444
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
4545
return DeclSyntax(result)
4646
}
4747
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
48-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
49-
return DeclSyntax(node.with(\.modifiers, newModifiers))
48+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
49+
return DeclSyntax(node.with(\.modifiers, modifiers))
5050
}
5151

5252
override func visit(_ node: AssociatedTypeDeclSyntax) -> DeclSyntax {
5353
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
5454
// token.
55-
guard let modifiers = node.modifiers else {
56-
let nodeWithModifier = node.addModifier(modifierKeyword)
55+
guard var modifiers = node.modifiers else {
56+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
5757
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
5858
return DeclSyntax(result)
5959
}
6060
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
61-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
62-
return DeclSyntax(node.with(\.modifiers, newModifiers))
61+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
62+
return DeclSyntax(node.with(\.modifiers, modifiers))
6363
}
6464

6565
override func visit(_ node: ClassDeclSyntax) -> DeclSyntax {
6666
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
6767
// token.
68-
guard let modifiers = node.modifiers else {
69-
let nodeWithModifier = node.addModifier(modifierKeyword)
68+
guard var modifiers = node.modifiers else {
69+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
7070
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
7171
return DeclSyntax(result)
7272
}
7373
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
74-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
75-
return DeclSyntax(node.with(\.modifiers, newModifiers))
74+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
75+
return DeclSyntax(node.with(\.modifiers, modifiers))
7676
}
7777

7878
override func visit(_ node: EnumDeclSyntax) -> DeclSyntax {
7979
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
8080
// token.
81-
guard let modifiers = node.modifiers else {
82-
let nodeWithModifier = node.addModifier(modifierKeyword)
81+
guard var modifiers = node.modifiers else {
82+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
8383
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
8484
return DeclSyntax(result)
8585
}
8686
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
87-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
88-
return DeclSyntax(node.with(\.modifiers, newModifiers))
87+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
88+
return DeclSyntax(node.with(\.modifiers, modifiers))
8989
}
9090

9191
override func visit(_ node: ProtocolDeclSyntax) -> DeclSyntax {
9292
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
9393
// token.
94-
guard let modifiers = node.modifiers else {
95-
let nodeWithModifier = node.addModifier(modifierKeyword)
94+
guard var modifiers = node.modifiers else {
95+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
9696
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
9797
return DeclSyntax(result)
9898
}
9999
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
100-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
101-
return DeclSyntax(node.with(\.modifiers, newModifiers))
100+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
101+
return DeclSyntax(node.with(\.modifiers, modifiers))
102102
}
103103

104104
override func visit(_ node: StructDeclSyntax) -> DeclSyntax {
105105
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
106106
// token.
107-
guard let modifiers = node.modifiers else {
108-
let nodeWithModifier = node.addModifier(modifierKeyword)
107+
guard var modifiers = node.modifiers else {
108+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
109109
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
110110
return DeclSyntax(result)
111111
}
112112
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
113-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
114-
return DeclSyntax(node.with(\.modifiers, newModifiers))
113+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
114+
return DeclSyntax(node.with(\.modifiers, modifiers))
115115
}
116116

117117
override func visit(_ node: TypeAliasDeclSyntax) -> DeclSyntax {
118118
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
119119
// token.
120-
guard let modifiers = node.modifiers else {
121-
let nodeWithModifier = node.addModifier(modifierKeyword)
120+
guard var modifiers = node.modifiers else {
121+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
122122
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
123123
return DeclSyntax(result)
124124
}
125125
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
126-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
127-
return DeclSyntax(node.with(\.modifiers, newModifiers))
126+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
127+
return DeclSyntax(node.with(\.modifiers, modifiers))
128128
}
129129

130130
override func visit(_ node: InitializerDeclSyntax) -> DeclSyntax {
131131
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
132132
// token.
133-
guard let modifiers = node.modifiers else {
134-
let nodeWithModifier = node.addModifier(modifierKeyword)
133+
guard var modifiers = node.modifiers else {
134+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
135135
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
136136
return DeclSyntax(result)
137137
}
138138
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
139-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
140-
return DeclSyntax(node.with(\.modifiers, newModifiers))
139+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
140+
return DeclSyntax(node.with(\.modifiers, modifiers))
141141
}
142142

143143
override func visit(_ node: SubscriptDeclSyntax) -> DeclSyntax {
144144
// Check for modifiers, and, if none, insert the modifier and relocate trivia from the displaced
145145
// token.
146-
guard let modifiers = node.modifiers else {
147-
let nodeWithModifier = node.addModifier(modifierKeyword)
146+
guard var modifiers = node.modifiers else {
147+
let nodeWithModifier = node.with(\.modifiers, .init([modifierKeyword]))
148148
let result = nodeByRelocatingTrivia(in: nodeWithModifier) { $0.modifiers }
149149
return DeclSyntax(result)
150150
}
151151
guard modifiers.accessLevelModifier == nil else { return DeclSyntax(node) }
152-
let newModifiers = modifiers.prepend(modifier: modifierKeyword)
153-
return DeclSyntax(node.with(\.modifiers, newModifiers))
152+
modifiers.triviaPreservingInsert(modifierKeyword, at: modifiers.startIndex)
153+
return DeclSyntax(node.with(\.modifiers, modifiers))
154154
}
155155

156156
/// Moves trivia in the given node to correct the placement of potentially displaced trivia in the

Sources/SwiftFormatRules/FullyIndirectEnum.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,10 @@ public final class FullyIndirectEnum: SyntaxFormatRule {
7171
"indirect", leadingTrivia: leadingTrivia, trailingTrivia: .spaces(1)), detail: nil)
7272

7373
let newMemberBlock = node.memberBlock.with(\.members, MemberBlockItemListSyntax(newMembers))
74-
return DeclSyntax(newEnumDecl.addModifier(newModifier).with(\.memberBlock, newMemberBlock))
74+
return DeclSyntax(
75+
newEnumDecl
76+
.with(\.modifiers, (newEnumDecl.modifiers ?? DeclModifierListSyntax([])) + [newModifier])
77+
.with(\.memberBlock, newMemberBlock))
7578
}
7679

7780
/// Returns a value indicating whether all enum cases in the given list are indirect.

Sources/SwiftFormatRules/ModifierListSyntax+Convenience.swift

Lines changed: 29 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ extension DeclModifierListSyntax {
3737

3838
/// Returns modifier list without the given modifier.
3939
func remove(name: String) -> DeclModifierListSyntax {
40-
let newModifiers = filter { $0.name.text != name }
41-
return DeclModifierListSyntax(newModifiers)
40+
return filter { $0.name.text != name }
4241
}
4342

4443
/// Returns a formatted declaration modifier token with the given name.
@@ -48,58 +47,36 @@ extension DeclModifierListSyntax {
4847
return newModifier
4948
}
5049

51-
/// Returns modifiers with the given modifier inserted at the given index.
52-
/// Preserves existing trivia and formats new trivia, given true for 'formatTrivia.'
53-
func insert(
54-
modifier: DeclModifierSyntax, at index: Int,
55-
formatTrivia: Bool = true
56-
) -> DeclModifierListSyntax {
57-
guard index >= 0, index <= count else { return self }
50+
/// Inserts the given modifier into the list at a specific index.
51+
///
52+
/// If the modifier is being inserted at the front of the list, the current front element's
53+
/// leading trivia will be moved to the new element to preserve any leading comments and newlines.
54+
mutating func triviaPreservingInsert(
55+
_ modifier: DeclModifierSyntax, at index: SyntaxChildrenIndex
56+
) {
57+
let modifier = replaceTrivia(
58+
on: modifier,
59+
token: modifier.name,
60+
trailingTrivia: .spaces(1))
5861

59-
var newModifiers: [DeclModifierSyntax] = []
60-
newModifiers.append(contentsOf: self)
61-
62-
let modifier = formatTrivia
63-
? replaceTrivia(
64-
on: modifier,
65-
token: modifier.name,
66-
trailingTrivia: .spaces(1)) : modifier
67-
68-
if index == 0 {
69-
guard formatTrivia else {
70-
newModifiers.insert(modifier, at: index)
71-
return DeclModifierListSyntax(newModifiers)
72-
}
73-
guard let firstMod = first, let firstTok = firstMod.firstToken(viewMode: .sourceAccurate) else {
74-
newModifiers.insert(modifier, at: index)
75-
return DeclModifierListSyntax(newModifiers)
76-
}
77-
let formattedMod = replaceTrivia(
78-
on: modifier,
79-
token: modifier.firstToken(viewMode: .sourceAccurate),
80-
leadingTrivia: firstTok.leadingTrivia)
81-
newModifiers[0] = replaceTrivia(
82-
on: firstMod,
83-
token: firstTok,
84-
leadingTrivia: [],
85-
trailingTrivia: .spaces(1))
86-
newModifiers.insert(formattedMod, at: 0)
87-
return DeclModifierListSyntax(newModifiers)
88-
} else {
89-
newModifiers.insert(modifier, at: index)
90-
return DeclModifierListSyntax(newModifiers)
62+
guard index == self.startIndex else {
63+
self.insert(modifier, at: index)
64+
return
65+
}
66+
guard let firstMod = first, let firstTok = firstMod.firstToken(viewMode: .sourceAccurate) else {
67+
self.insert(modifier, at: index)
68+
return
9169
}
92-
}
93-
94-
/// Returns modifier list with the given modifier at the end.
95-
/// Trivia manipulation optional by 'formatTrivia'
96-
func append(modifier: DeclModifierSyntax, formatTrivia: Bool = true) -> DeclModifierListSyntax {
97-
return insert(modifier: modifier, at: count, formatTrivia: formatTrivia)
98-
}
9970

100-
/// Returns modifier list with the given modifier at the beginning.
101-
/// Trivia manipulation optional by 'formatTrivia'
102-
func prepend(modifier: DeclModifierSyntax, formatTrivia: Bool = true) -> DeclModifierListSyntax {
103-
return insert(modifier: modifier, at: 0, formatTrivia: formatTrivia)
71+
let formattedMod = replaceTrivia(
72+
on: modifier,
73+
token: modifier.firstToken(viewMode: .sourceAccurate),
74+
leadingTrivia: firstTok.leadingTrivia)
75+
self[self.startIndex] = replaceTrivia(
76+
on: firstMod,
77+
token: firstTok,
78+
leadingTrivia: [],
79+
trailingTrivia: .spaces(1))
80+
self.insert(formattedMod, at: self.startIndex)
10481
}
10582
}

Sources/generate-pipeline/RuleCollector.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ final class RuleCollector {
8383
/// Determine the rule kind for the declaration in the given statement, if any.
8484
private func detectedRule(at statement: CodeBlockItemSyntax) -> DetectedRule? {
8585
let typeName: String
86-
let members: MemberDeclListSyntax
87-
let maybeInheritanceClause: TypeInheritanceClauseSyntax?
86+
let members: MemberBlockItemListSyntax
87+
let maybeInheritanceClause: InheritanceClauseSyntax?
8888

8989
if let classDecl = statement.item.as(ClassDeclSyntax.self) {
9090
typeName = classDecl.name.text
@@ -105,7 +105,7 @@ final class RuleCollector {
105105

106106
// Scan through the inheritance clause to find one of the protocols/types we're interested in.
107107
for inheritance in inheritanceClause.inheritedTypes {
108-
guard let identifier = inheritance.type.as(SimpleTypeIdentifierSyntax.self) else {
108+
guard let identifier = inheritance.type.as(IdentifierTypeSyntax.self) else {
109109
continue
110110
}
111111

@@ -126,7 +126,7 @@ final class RuleCollector {
126126
guard let function = member.decl.as(FunctionDeclSyntax.self) else { continue }
127127
guard function.name.text == "visit" else { continue }
128128
let params = function.signature.parameterClause.parameters
129-
guard let firstType = params.firstAndOnly?.type.as(SimpleTypeIdentifierSyntax.self) else {
129+
guard let firstType = params.firstAndOnly?.type.as(IdentifierTypeSyntax.self) else {
130130
continue
131131
}
132132
visitedNodes.append(firstType.name.text)

Tests/SwiftFormatCoreTests/RuleMaskTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ final class RuleMaskTests: XCTestCase {
1212
private func createMask(sourceText: String) -> RuleMask {
1313
let fileURL = URL(fileURLWithPath: "/tmp/test.swift")
1414
let syntax = Parser.parse(source: sourceText)
15-
converter = SourceLocationConverter(file: fileURL.path, tree: syntax)
15+
converter = SourceLocationConverter(fileName: fileURL.path, tree: syntax)
1616
return RuleMask(syntaxNode: Syntax(syntax), sourceLocationConverter: converter)
1717
}
1818

0 commit comments

Comments
 (0)