Skip to content

Commit 95f3fca

Browse files
committed
Simplify trailing comma handling
1 parent 47cfe93 commit 95f3fca

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

Sources/SPMPackageEditor/ManifestRewriter.swift

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -257,16 +257,20 @@ final class DependenciesArrayWriter: SyntaxRewriter {
257257
/// Writer for inserting a trailing comma in an array expr.
258258
final class ArrayTrailingCommaWriter: SyntaxRewriter {
259259
let lastElement: ArrayElementSyntax
260+
let addSpaceAfterComma: Bool
260261

261-
init(lastElement: ArrayElementSyntax) {
262+
init(lastElement: ArrayElementSyntax, addSpaceAfterComma: Bool) {
262263
self.lastElement = lastElement
264+
self.addSpaceAfterComma = addSpaceAfterComma
263265
}
264266

265267
override func visit(_ node: ArrayElementSyntax) -> Syntax {
266268
guard lastElement == node else {
267269
return Syntax(node)
268270
}
269-
return Syntax(node.withTrailingComma(SyntaxFactory.makeCommaToken(trailingTrivia: .spaces(1))))
271+
return Syntax(node.withTrailingComma(SyntaxFactory.makeCommaToken(
272+
trailingTrivia: addSpaceAfterComma ? .spaces(1) : []))
273+
)
270274
}
271275
}
272276

@@ -334,12 +338,16 @@ final class PackageDependencyWriter: SyntaxRewriter {
334338
let rightBrace = SyntaxFactory.makeRightSquareBracketToken(
335339
leadingTrivia: [.newlines(1), .spaces(4)])
336340

337-
let newElements = SyntaxFactory.makeArrayElementList(
338-
node.elements.dropLast() +
339-
[node.elements.last?.withTrailingComma(SyntaxFactory.makeCommaToken()),
340-
newDependencyElement].compactMap {$0})
341+
var newNode = node
342+
if newNode.elements.count > 0 {
343+
let lastElement = newNode.elements.map{$0}.last!
344+
let trailingTriviaWriter = ArrayTrailingCommaWriter(lastElement: lastElement,
345+
addSpaceAfterComma: false)
346+
let newElements = trailingTriviaWriter.visit(newNode.elements)
347+
newNode = newNode.withElements((newElements.as(ArrayElementListSyntax.self)!))
348+
}
341349

342-
return ExprSyntax(node.withElements(newElements)
350+
return ExprSyntax(newNode.addElement(newDependencyElement)
343351
.withRightSquare(rightBrace))
344352
}
345353
}
@@ -360,7 +368,8 @@ final class TargetDependencyWriter: SyntaxRewriter {
360368
// Insert trailing comma, if needed.
361369
if node.elements.count > 0 {
362370
let lastElement = node.elements.map{$0}.last!
363-
let trailingTriviaWriter = ArrayTrailingCommaWriter(lastElement: lastElement)
371+
let trailingTriviaWriter = ArrayTrailingCommaWriter(lastElement: lastElement,
372+
addSpaceAfterComma: true)
364373
let newElements = trailingTriviaWriter.visit(node.elements)
365374
node = node.withElements((newElements.as(ArrayElementListSyntax.self)!))
366375
}

0 commit comments

Comments
 (0)