Skip to content

Commit 64e4184

Browse files
committed
Introduce manifest editing API for "add target dependency"
As a convenience for when we want to be able to add new target dependencies, introduce a manifest editing API that adds a new target dependency to an existing target in the manifest.
1 parent 9183b7c commit 64e4184

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

Sources/PackageModelSyntax/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_library(PackageModelSyntax
1010
AddPackageDependency.swift
1111
AddProduct.swift
1212
AddTarget.swift
13+
AddTargetDependency.swift
1314
ManifestEditError.swift
1415
ManifestSyntaxRepresentable.swift
1516
PackageDependency+Syntax.swift

Sources/PackageModelSyntax/ManifestEditError.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import SwiftSyntax
1818
/// package manifest programattically.
1919
package enum ManifestEditError: Error {
2020
case cannotFindPackage
21+
case cannotFindTargets
22+
case cannotFindTarget(targetName: String)
2123
case cannotFindArrayLiteralArgument(argumentName: String, node: Syntax)
2224
case oldManifest(ToolsVersion)
2325
}
@@ -33,6 +35,10 @@ extension ManifestEditError: CustomStringConvertible {
3335
switch self {
3436
case .cannotFindPackage:
3537
"invalid manifest: unable to find 'Package' declaration"
38+
case .cannotFindTargets:
39+
"unable to find package targets in manifest"
40+
case .cannotFindTarget(targetName: let name):
41+
"unable to find target named '\(name)' in package"
3642
case .cannotFindArrayLiteralArgument(argumentName: let name, node: _):
3743
"unable to find array literal for '\(name)' argument"
3844
case .oldManifest(let version):

Tests/PackageModelSyntaxTests/ManifestEditTests.swift

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,46 @@ class ManifestEditTests: XCTestCase {
611611
)
612612
}
613613
}
614+
615+
func testAddTargetDependency() throws {
616+
try assertManifestRefactor("""
617+
// swift-tools-version: 5.5
618+
let package = Package(
619+
name: "packages",
620+
dependencies: [
621+
.package(url: "https://github.com/apple/swift-testing.git", from: "0.8.0"),
622+
],
623+
targets: [
624+
.testTarget(
625+
name: "MyTest"
626+
),
627+
]
628+
)
629+
""",
630+
expectedManifest: """
631+
// swift-tools-version: 5.5
632+
let package = Package(
633+
name: "packages",
634+
dependencies: [
635+
.package(url: "https://github.com/apple/swift-testing.git", from: "0.8.0"),
636+
],
637+
targets: [
638+
.testTarget(
639+
name: "MyTest",
640+
dependencies: [
641+
.product(name: "Testing", package: "swift-testing"),
642+
]
643+
),
644+
]
645+
)
646+
""") { manifest in
647+
try AddTargetDependency.addTargetDependency(
648+
.product(name: "Testing", package: "swift-testing"),
649+
targetName: "MyTest",
650+
to: manifest
651+
)
652+
}
653+
}
614654
}
615655

616656

0 commit comments

Comments
 (0)