From 81ff1f76b54838b5495cd94cae76c8bfa4f7806c Mon Sep 17 00:00:00 2001 From: Owen Voorhees Date: Sun, 15 Nov 2020 11:24:03 -0800 Subject: [PATCH] [PackageEditing] Fix dependency insertion when the existing deps list doesn't have a trailing comma --- .../SPMPackageEditor/ManifestRewriter.swift | 7 +++- .../AddPackageDependencyTests.swift | 34 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Sources/SPMPackageEditor/ManifestRewriter.swift b/Sources/SPMPackageEditor/ManifestRewriter.swift index 34dfbb20b87..f06a0a6db56 100644 --- a/Sources/SPMPackageEditor/ManifestRewriter.swift +++ b/Sources/SPMPackageEditor/ManifestRewriter.swift @@ -344,7 +344,12 @@ final class PackageDependencyWriter: SyntaxRewriter { let rightBrace = SyntaxFactory.makeRightSquareBracketToken( leadingTrivia: [.newlines(1), .spaces(4)]) - return ExprSyntax(node.addElement(newDependencyElement) + let newElements = SyntaxFactory.makeArrayElementList( + node.elements.dropLast() + + [node.elements.last?.withTrailingComma(SyntaxFactory.makeCommaToken()), + newDependencyElement].compactMap {$0}) + + return ExprSyntax(node.withElements(newElements) .withRightSquare(rightBrace)) } } diff --git a/Tests/SPMPackageEditorTests/AddPackageDependencyTests.swift b/Tests/SPMPackageEditorTests/AddPackageDependencyTests.swift index 631e413e9f9..5fd252b0c12 100644 --- a/Tests/SPMPackageEditorTests/AddPackageDependencyTests.swift +++ b/Tests/SPMPackageEditorTests/AddPackageDependencyTests.swift @@ -233,4 +233,38 @@ final class AddPackageDependencyTests: XCTestCase { ) """) } + + func testAddPackageDependency7() throws { + let manifest = """ + let package = Package( + name: "exec", + dependencies: [ + .package(url: "https://github.com/foo/bar", from: "1.0.3") + ], + targets: [ + .target(name: "exec") + ] + ) + """ + + + let editor = try ManifestRewriter(manifest) + try editor.addPackageDependency( + url: "https://github.com/foo/goo", + requirement: .upToNextMajor("1.0.1") + ) + + XCTAssertEqual(editor.editedManifest, """ + let package = Package( + name: "exec", + dependencies: [ + .package(url: "https://github.com/foo/bar", from: "1.0.3"), + .package(url: "https://github.com/foo/goo", from: "1.0.1"), + ], + targets: [ + .target(name: "exec") + ] + ) + """) + } }