@@ -37,7 +37,7 @@ public final class ManifestRewriter {
37
37
/// Create a new manfiest editor with the given contents.
38
38
public init ( _ manifest: String ) throws {
39
39
self . originalManifest = manifest
40
- self . editedSource = try SyntaxParser . parse ( source: manifest)
40
+ self . editedSource = Syntax ( try SyntaxParser . parse ( source: manifest) )
41
41
}
42
42
43
43
/// Add a package dependency.
@@ -47,15 +47,15 @@ public final class ManifestRewriter {
47
47
) throws {
48
48
// Find Package initializer.
49
49
let packageFinder = PackageInitFinder ( )
50
- editedSource . walk ( packageFinder )
50
+ packageFinder . walk ( editedSource )
51
51
52
52
guard let initFnExpr = packageFinder. packageInit else {
53
53
throw Error . error ( " Couldn't find Package initializer " )
54
54
}
55
55
56
56
// Find dependencies section in the argument list of Package(...).
57
57
let packageDependenciesFinder = DependenciesArrayFinder ( )
58
- initFnExpr . argumentList . walk ( packageDependenciesFinder )
58
+ packageDependenciesFinder . walk ( initFnExpr . argumentList )
59
59
60
60
let packageDependencies : ArrayExprSyntax
61
61
if let existingPackageDependencies = packageDependenciesFinder. dependenciesArrayExpr {
@@ -66,7 +66,7 @@ public final class ManifestRewriter {
66
66
67
67
// Find the inserted section.
68
68
let packageDependenciesFinder = DependenciesArrayFinder ( )
69
- argListWithDependencies . walk ( packageDependenciesFinder )
69
+ packageDependenciesFinder . walk ( argListWithDependencies )
70
70
packageDependencies = packageDependenciesFinder. dependenciesArrayExpr!
71
71
}
72
72
@@ -86,28 +86,28 @@ public final class ManifestRewriter {
86
86
) throws {
87
87
// Find Package initializer.
88
88
let packageFinder = PackageInitFinder ( )
89
- editedSource . walk ( packageFinder )
89
+ packageFinder . walk ( editedSource )
90
90
91
91
guard let initFnExpr = packageFinder. packageInit else {
92
92
throw Error . error ( " Couldn't find Package initializer " )
93
93
}
94
94
95
95
// Find the `targets: []` array.
96
96
let targetsArrayFinder = TargetsArrayFinder ( )
97
- initFnExpr . argumentList . walk ( targetsArrayFinder )
97
+ targetsArrayFinder . walk ( initFnExpr . argumentList )
98
98
guard let targetsArrayExpr = targetsArrayFinder. targets else {
99
99
throw Error . error ( " Couldn't find targets label " )
100
100
}
101
101
102
102
// Find the target node.
103
103
let targetFinder = TargetFinder ( name: target)
104
- targetsArrayExpr . walk ( targetFinder )
104
+ targetFinder . walk ( targetsArrayExpr )
105
105
guard let targetNode = targetFinder. foundTarget else {
106
106
throw Error . error ( " Couldn't find target \( target) " )
107
107
}
108
108
109
109
let targetDependencyFinder = DependenciesArrayFinder ( )
110
- targetNode . walk ( targetDependencyFinder )
110
+ targetDependencyFinder . walk ( targetNode )
111
111
112
112
guard let targetDependencies = targetDependencyFinder. dependenciesArrayExpr else {
113
113
throw Error . error ( " Couldn't find dependencies section " )
@@ -128,14 +128,14 @@ public final class ManifestRewriter {
128
128
) throws {
129
129
// Find Package initializer.
130
130
let packageFinder = PackageInitFinder ( )
131
- editedSource . walk ( packageFinder )
131
+ packageFinder . walk ( editedSource )
132
132
133
133
guard let initFnExpr = packageFinder. packageInit else {
134
134
throw Error . error ( " Couldn't find Package initializer " )
135
135
}
136
136
137
137
let targetsFinder = TargetsArrayFinder ( )
138
- initFnExpr . argumentList . walk ( targetsFinder )
138
+ targetsFinder . walk ( initFnExpr . argumentList )
139
139
140
140
guard let targetsNode = targetsFinder. targets else {
141
141
throw Error . error ( " Couldn't find targets section " )
@@ -157,12 +157,8 @@ final class PackageInitFinder: SyntaxVisitor {
157
157
/// Reference to the function call of the package initializer.
158
158
private( set) var packageInit : FunctionCallExprSyntax ?
159
159
160
- override func shouldVisit( _ kind: SyntaxKind ) -> Bool {
161
- return kind == . initializerClause
162
- }
163
-
164
160
override func visit( _ node: InitializerClauseSyntax ) -> SyntaxVisitorContinueKind {
165
- if let fnCall = node. value as? FunctionCallExprSyntax ,
161
+ if let fnCall = FunctionCallExprSyntax ( Syntax ( node. value) ) ,
166
162
let identifier = fnCall. calledExpression. firstToken,
167
163
identifier. text == " Package " {
168
164
assert ( packageInit == nil , " Found two package initializers " )
@@ -177,15 +173,15 @@ final class DependenciesArrayFinder: SyntaxVisitor {
177
173
178
174
private( set) var dependenciesArrayExpr : ArrayExprSyntax ?
179
175
180
- override func visit( _ node: FunctionCallArgumentSyntax ) -> SyntaxVisitorContinueKind {
176
+ override func visit( _ node: TupleExprElementSyntax ) -> SyntaxVisitorContinueKind {
181
177
guard node. label? . text == " dependencies " else {
182
178
return . skipChildren
183
179
}
184
180
185
181
// We have custom code like foo + bar + [] (hopefully there is an array expr here).
186
- if let seq = node. expression as? SequenceExprSyntax {
187
- dependenciesArrayExpr = seq. elements. first ( where: { $0 is ArrayExprSyntax } ) as? ArrayExprSyntax
188
- } else if let arrayExpr = node. expression as? ArrayExprSyntax {
182
+ if let seq = node. expression. as ( SequenceExprSyntax . self ) {
183
+ dependenciesArrayExpr = seq. elements. first ( where: { $0. is ( ArrayExprSyntax . self ) } ) ? . as ( ArrayExprSyntax . self )
184
+ } else if let arrayExpr = node. expression. as ( ArrayExprSyntax . self ) {
189
185
dependenciesArrayExpr = arrayExpr
190
186
}
191
187
@@ -202,9 +198,9 @@ final class TargetsArrayFinder: SyntaxVisitor {
202
198
/// The found targets array expr.
203
199
private( set) var targets : ArrayExprSyntax ?
204
200
205
- override func visit( _ node: FunctionCallArgumentSyntax ) -> SyntaxVisitorContinueKind {
201
+ override func visit( _ node: TupleExprElementSyntax ) -> SyntaxVisitorContinueKind {
206
202
if node. label? . text == " targets " ,
207
- let expr = node. expression as? ArrayExprSyntax {
203
+ let expr = node. expression. as ( ArrayExprSyntax . self ) {
208
204
assert ( targets == nil , " Found two targets labels " )
209
205
targets = expr
210
206
}
@@ -216,25 +212,27 @@ final class TargetsArrayFinder: SyntaxVisitor {
216
212
final class TargetFinder : SyntaxVisitor {
217
213
218
214
let targetToFind : String
219
- private( set) var foundTarget : FunctionCallArgumentListSyntax ?
215
+ private( set) var foundTarget : TupleExprElementListSyntax ?
220
216
221
217
init ( name: String ) {
222
218
self . targetToFind = name
223
219
}
224
220
225
- override func visit( _ node: FunctionCallArgumentSyntax ) -> SyntaxVisitorContinueKind {
221
+ override func visit( _ node: TupleExprElementSyntax ) -> SyntaxVisitorContinueKind {
226
222
guard case . identifier( let label) ? = node. label? . tokenKind else {
227
223
return . skipChildren
228
224
}
229
- guard label == " name " , let targetNameExpr = node. expression as? StringLiteralExprSyntax else {
225
+ guard label == " name " , let targetNameExpr = node. expression. as ( StringLiteralExprSyntax . self) ,
226
+ targetNameExpr. segments. count == 1 , let segment = targetNameExpr. segments. first? . as ( StringSegmentSyntax . self) else {
230
227
return . skipChildren
231
228
}
232
- guard case . stringLiteral( let targetName) = targetNameExpr. stringLiteral. tokenKind else {
229
+
230
+ guard case . stringSegment( let targetName) = segment. content. tokenKind else {
233
231
return . skipChildren
234
232
}
235
233
236
- if targetName == " \" " + self . targetToFind + " \" " {
237
- self . foundTarget = node. parent as? FunctionCallArgumentListSyntax
234
+ if targetName == self . targetToFind {
235
+ self . foundTarget = node. parent? . as ( TupleExprElementListSyntax . self )
238
236
return . skipChildren
239
237
}
240
238
@@ -247,22 +245,22 @@ final class TargetFinder: SyntaxVisitor {
247
245
/// Writer for "dependencies" array syntax.
248
246
final class DependenciesArrayWriter : SyntaxRewriter {
249
247
250
- override func visit( _ node: FunctionCallArgumentListSyntax ) -> Syntax {
248
+ override func visit( _ node: TupleExprElementListSyntax ) -> Syntax {
251
249
let leadingTrivia = node. firstToken? . leadingTrivia ?? . zero
252
250
253
- let dependenciesArg = SyntaxFactory . makeFunctionCallArgument (
251
+ let dependenciesArg = SyntaxFactory . makeTupleExprElement (
254
252
label: SyntaxFactory . makeIdentifier ( " dependencies " , leadingTrivia: leadingTrivia) ,
255
253
colon: SyntaxFactory . makeColonToken ( trailingTrivia: . spaces( 1 ) ) ,
256
- expression: SyntaxFactory . makeArrayExpr (
257
- leftSquare: SyntaxFactory . makeLeftSquareBracketToken ( ) ,
258
- elements: SyntaxFactory . makeBlankArrayElementList ( ) ,
259
- rightSquare: SyntaxFactory . makeRightSquareBracketToken ( ) ) ,
254
+ expression: ExprSyntax ( SyntaxFactory . makeArrayExpr (
255
+ leftSquare: SyntaxFactory . makeLeftSquareBracketToken ( ) ,
256
+ elements: SyntaxFactory . makeBlankArrayElementList ( ) ,
257
+ rightSquare: SyntaxFactory . makeRightSquareBracketToken ( ) ) ) ,
260
258
trailingComma: SyntaxFactory . makeCommaToken ( )
261
259
)
262
260
263
261
// FIXME: This is not correct, we need to find the
264
262
// proper position for inserting `dependencies: []`.
265
- return node. inserting ( dependenciesArg, at: 1 )
263
+ return Syntax ( node. inserting ( dependenciesArg, at: 1 ) )
266
264
}
267
265
}
268
266
@@ -276,9 +274,9 @@ final class ArrayTrailingCommaWriter: SyntaxRewriter {
276
274
277
275
override func visit( _ node: ArrayElementSyntax ) -> Syntax {
278
276
guard lastElement == node else {
279
- return node
277
+ return Syntax ( node)
280
278
}
281
- return node. withTrailingComma ( SyntaxFactory . makeCommaToken ( trailingTrivia: . spaces( 1 ) ) )
279
+ return Syntax ( node. withTrailingComma ( SyntaxFactory . makeCommaToken ( trailingTrivia: . spaces( 1 ) ) ) )
282
280
}
283
281
}
284
282
@@ -307,46 +305,47 @@ final class PackageDependencyWriter: SyntaxRewriter {
307
305
declNameArguments: nil
308
306
)
309
307
310
- var args : [ FunctionCallArgumentSyntax ] = [ ]
308
+ var args : [ TupleExprElementSyntax ] = [ ]
311
309
312
310
let firstArgLabel = requirement == . localPackage ? " path " : " url "
313
- let url = SyntaxFactory . makeFunctionCallArgument (
311
+ let url = SyntaxFactory . makeTupleExprElement (
314
312
label: SyntaxFactory . makeIdentifier ( firstArgLabel) ,
315
313
colon: SyntaxFactory . makeColonToken ( trailingTrivia: . spaces( 1 ) ) ,
316
- expression: SyntaxFactory . makeStringLiteralExpr ( self . url) ,
314
+ expression: ExprSyntax ( SyntaxFactory . makeStringLiteralExpr ( self . url) ) ,
317
315
trailingComma: requirement == . localPackage ? nil : SyntaxFactory . makeCommaToken ( trailingTrivia: . spaces( 1 ) )
318
316
)
319
317
args. append ( url)
320
318
321
319
// FIXME: Handle other types of requirements.
322
320
if requirement != . localPackage {
323
- let secondArg = SyntaxFactory . makeFunctionCallArgument (
321
+ let secondArg = SyntaxFactory . makeTupleExprElement (
324
322
label: SyntaxFactory . makeIdentifier ( " from " ) ,
325
323
colon: SyntaxFactory . makeColonToken ( trailingTrivia: . spaces( 1 ) ) ,
326
- expression: SyntaxFactory . makeStringLiteralExpr ( requirement. ref!) ,
324
+ expression: ExprSyntax ( SyntaxFactory . makeStringLiteralExpr ( requirement. ref!) ) ,
327
325
trailingComma: nil
328
326
)
329
327
args. append ( secondArg)
330
328
}
331
329
332
330
let expr = SyntaxFactory . makeFunctionCallExpr (
333
- calledExpression: dotPackageExpr,
331
+ calledExpression: ExprSyntax ( dotPackageExpr) ,
334
332
leftParen: SyntaxFactory . makeLeftParenToken ( ) ,
335
- argumentList: SyntaxFactory . makeFunctionCallArgumentList ( args) ,
333
+ argumentList: SyntaxFactory . makeTupleExprElementList ( args) ,
336
334
rightParen: SyntaxFactory . makeRightParenToken ( ) ,
337
- trailingClosure: nil
335
+ trailingClosure: nil ,
336
+ additionalTrailingClosures: nil
338
337
)
339
338
340
339
let newDependencyElement = SyntaxFactory . makeArrayElement (
341
- expression: expr,
340
+ expression: ExprSyntax ( expr) ,
342
341
trailingComma: SyntaxFactory . makeCommaToken ( )
343
342
)
344
343
345
344
let rightBrace = SyntaxFactory . makeRightSquareBracketToken (
346
345
leadingTrivia: [ . newlines( 1 ) , . spaces( 4 ) ] )
347
346
348
- return node. addArrayElement ( newDependencyElement)
349
- . withRightSquare ( rightBrace)
347
+ return ExprSyntax ( node. addElement ( newDependencyElement)
348
+ . withRightSquare ( rightBrace) )
350
349
}
351
350
}
352
351
@@ -368,15 +367,15 @@ final class TargetDependencyWriter: SyntaxRewriter {
368
367
let lastElement = node. elements. map { $0} . last!
369
368
let trailingTriviaWriter = ArrayTrailingCommaWriter ( lastElement: lastElement)
370
369
let newElements = trailingTriviaWriter. visit ( node. elements)
371
- node = node. withElements ( ( newElements as! ArrayElementListSyntax ) )
370
+ node = node. withElements ( ( newElements. as ( ArrayElementListSyntax . self ) ! ) )
372
371
}
373
372
374
373
let newDependencyElement = SyntaxFactory . makeArrayElement (
375
- expression: SyntaxFactory . makeStringLiteralExpr ( self . dependencyName) ,
374
+ expression: ExprSyntax ( SyntaxFactory . makeStringLiteralExpr ( self . dependencyName) ) ,
376
375
trailingComma: nil
377
376
)
378
377
379
- return node. addArrayElement ( newDependencyElement)
378
+ return ExprSyntax ( node. addElement ( newDependencyElement) )
380
379
}
381
380
}
382
381
@@ -403,36 +402,37 @@ final class NewTargetWriter: SyntaxRewriter {
403
402
declNameArguments: nil
404
403
)
405
404
406
- let nameArg = SyntaxFactory . makeFunctionCallArgument (
405
+ let nameArg = SyntaxFactory . makeTupleExprElement (
407
406
label: SyntaxFactory . makeIdentifier ( " name " , leadingTrivia: leadingTriviaArgs) ,
408
407
colon: SyntaxFactory . makeColonToken ( trailingTrivia: . spaces( 1 ) ) ,
409
- expression: SyntaxFactory . makeStringLiteralExpr ( self . name) ,
408
+ expression: ExprSyntax ( SyntaxFactory . makeStringLiteralExpr ( self . name) ) ,
410
409
trailingComma: SyntaxFactory . makeCommaToken ( )
411
410
)
412
411
413
412
let emptyArray = SyntaxFactory . makeArrayExpr ( leftSquare: SyntaxFactory . makeLeftSquareBracketToken ( ) , elements: SyntaxFactory . makeBlankArrayElementList ( ) , rightSquare: SyntaxFactory . makeRightSquareBracketToken ( ) )
414
- let depenenciesArg = SyntaxFactory . makeFunctionCallArgument (
413
+ let depenenciesArg = SyntaxFactory . makeTupleExprElement (
415
414
label: SyntaxFactory . makeIdentifier ( " dependencies " , leadingTrivia: leadingTriviaArgs) ,
416
415
colon: SyntaxFactory . makeColonToken ( trailingTrivia: . spaces( 1 ) ) ,
417
- expression: emptyArray,
416
+ expression: ExprSyntax ( emptyArray) ,
418
417
trailingComma: nil
419
418
)
420
419
421
420
let expr = SyntaxFactory . makeFunctionCallExpr (
422
- calledExpression: dotPackageExpr,
421
+ calledExpression: ExprSyntax ( dotPackageExpr) ,
423
422
leftParen: SyntaxFactory . makeLeftParenToken ( ) ,
424
- argumentList: SyntaxFactory . makeFunctionCallArgumentList ( [
423
+ argumentList: SyntaxFactory . makeTupleExprElementList ( [
425
424
nameArg, depenenciesArg,
426
- ] ) ,
425
+ ] ) ,
427
426
rightParen: SyntaxFactory . makeRightParenToken ( ) ,
428
- trailingClosure: nil
427
+ trailingClosure: nil ,
428
+ additionalTrailingClosures: nil
429
429
)
430
430
431
431
let newDependencyElement = SyntaxFactory . makeArrayElement (
432
- expression: expr,
432
+ expression: ExprSyntax ( expr) ,
433
433
trailingComma: SyntaxFactory . makeCommaToken ( )
434
434
)
435
435
436
- return node. addArrayElement ( newDependencyElement)
436
+ return ExprSyntax ( node. addElement ( newDependencyElement) )
437
437
}
438
438
}
0 commit comments