@@ -54,20 +54,20 @@ public final class ManifestRewriter {
54
54
}
55
55
56
56
// Find dependencies section in the argument list of Package(...).
57
- let packageDependenciesFinder = DependenciesArrayFinder ( )
57
+ let packageDependenciesFinder = ArrayExprArgumentFinder ( expectedLabel : " dependencies " )
58
58
packageDependenciesFinder. walk ( initFnExpr. argumentList)
59
59
60
60
let packageDependencies : ArrayExprSyntax
61
- if let existingPackageDependencies = packageDependenciesFinder. dependenciesArrayExpr {
61
+ if let existingPackageDependencies = packageDependenciesFinder. foundArrayExpr {
62
62
packageDependencies = existingPackageDependencies
63
63
} else {
64
64
// We didn't find a dependencies section so insert one.
65
65
let argListWithDependencies = DependenciesArrayWriter ( ) . visit ( initFnExpr. argumentList)
66
66
67
67
// Find the inserted section.
68
- let packageDependenciesFinder = DependenciesArrayFinder ( )
68
+ let packageDependenciesFinder = ArrayExprArgumentFinder ( expectedLabel : " dependencies " )
69
69
packageDependenciesFinder. walk ( argListWithDependencies)
70
- packageDependencies = packageDependenciesFinder. dependenciesArrayExpr !
70
+ packageDependencies = packageDependenciesFinder. foundArrayExpr !
71
71
}
72
72
73
73
// Add the the package dependency entry.
@@ -93,9 +93,9 @@ public final class ManifestRewriter {
93
93
}
94
94
95
95
// Find the `targets: []` array.
96
- let targetsArrayFinder = TargetsArrayFinder ( )
96
+ let targetsArrayFinder = ArrayExprArgumentFinder ( expectedLabel : " targets " )
97
97
targetsArrayFinder. walk ( initFnExpr. argumentList)
98
- guard let targetsArrayExpr = targetsArrayFinder. targets else {
98
+ guard let targetsArrayExpr = targetsArrayFinder. foundArrayExpr else {
99
99
throw Error . error ( " Couldn't find targets label " )
100
100
}
101
101
@@ -106,10 +106,10 @@ public final class ManifestRewriter {
106
106
throw Error . error ( " Couldn't find target \( target) " )
107
107
}
108
108
109
- let targetDependencyFinder = DependenciesArrayFinder ( )
109
+ let targetDependencyFinder = ArrayExprArgumentFinder ( expectedLabel : " dependencies " )
110
110
targetDependencyFinder. walk ( targetNode)
111
111
112
- guard let targetDependencies = targetDependencyFinder. dependenciesArrayExpr else {
112
+ guard let targetDependencies = targetDependencyFinder. foundArrayExpr else {
113
113
throw Error . error ( " Couldn't find dependencies section " )
114
114
}
115
115
@@ -134,10 +134,10 @@ public final class ManifestRewriter {
134
134
throw Error . error ( " Couldn't find Package initializer " )
135
135
}
136
136
137
- let targetsFinder = TargetsArrayFinder ( )
137
+ let targetsFinder = ArrayExprArgumentFinder ( expectedLabel : " targets " )
138
138
targetsFinder. walk ( initFnExpr. argumentList)
139
139
140
- guard let targetsNode = targetsFinder. targets else {
140
+ guard let targetsNode = targetsFinder. foundArrayExpr else {
141
141
throw Error . error ( " Couldn't find targets section " )
142
142
}
143
143
@@ -169,20 +169,26 @@ final class PackageInitFinder: SyntaxVisitor {
169
169
}
170
170
171
171
/// Finder for "dependencies" array syntax.
172
- final class DependenciesArrayFinder : SyntaxVisitor {
172
+ final class ArrayExprArgumentFinder : SyntaxVisitor {
173
173
174
- private( set) var dependenciesArrayExpr : ArrayExprSyntax ?
174
+ private( set) var foundArrayExpr : ArrayExprSyntax ?
175
+ private let expectedLabel : String
176
+
177
+ init ( expectedLabel: String ) {
178
+ self . expectedLabel = expectedLabel
179
+ super. init ( )
180
+ }
175
181
176
182
override func visit( _ node: TupleExprElementSyntax ) -> SyntaxVisitorContinueKind {
177
- guard node. label? . text == " dependencies " else {
183
+ guard node. label? . text == expectedLabel else {
178
184
return . skipChildren
179
185
}
180
186
181
187
// We have custom code like foo + bar + [] (hopefully there is an array expr here).
182
188
if let seq = node. expression. as ( SequenceExprSyntax . self) {
183
- dependenciesArrayExpr = seq. elements. first ( where: { $0. is ( ArrayExprSyntax . self) } ) ? . as ( ArrayExprSyntax . self)
189
+ foundArrayExpr = seq. elements. first ( where: { $0. is ( ArrayExprSyntax . self) } ) ? . as ( ArrayExprSyntax . self)
184
190
} else if let arrayExpr = node. expression. as ( ArrayExprSyntax . self) {
185
- dependenciesArrayExpr = arrayExpr
191
+ foundArrayExpr = arrayExpr
186
192
}
187
193
188
194
// FIXME: If we find a dependencies section but not an array expr, then we should
@@ -192,22 +198,6 @@ final class DependenciesArrayFinder: SyntaxVisitor {
192
198
}
193
199
}
194
200
195
- /// Finder for targets array expression.
196
- final class TargetsArrayFinder : SyntaxVisitor {
197
-
198
- /// The found targets array expr.
199
- private( set) var targets : ArrayExprSyntax ?
200
-
201
- override func visit( _ node: TupleExprElementSyntax ) -> SyntaxVisitorContinueKind {
202
- if node. label? . text == " targets " ,
203
- let expr = node. expression. as ( ArrayExprSyntax . self) {
204
- assert ( targets == nil , " Found two targets labels " )
205
- targets = expr
206
- }
207
- return . skipChildren
208
- }
209
- }
210
-
211
201
/// Finds a given target in a list of targets.
212
202
final class TargetFinder : SyntaxVisitor {
213
203
0 commit comments