Skip to content

Commit dc92027

Browse files
committed
[Commands] AddSetting: Searching for a target in the manifest shouldn't walk targets recursively
Otherwise in situations like: ```swift let package = Package( name: "packages", targets: [ .target( name: "MyTest", dependencies: [ .byName(name: "Dependency") ] ), .target( name: "Dependency" ) ] ) ``` When adding settings to `Dependency` we'd find `.byName(name: "Dependency")` instead of `.target(name: "Dependency", ...)`.
1 parent 99b0b06 commit dc92027

File tree

3 files changed

+62
-9
lines changed

3 files changed

+62
-9
lines changed

Sources/Commands/PackageCommands/Migrate.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,8 @@ extension SwiftPackageCommand {
195195
try SwiftPackageCommand.AddSetting.editSwiftSettings(
196196
of: target,
197197
using: swiftCommandState,
198-
[setting]
198+
[setting],
199+
verbose: !self.globalOptions.logging.quiet
199200
)
200201
} catch {
201202
print(

Sources/PackageModelSyntax/AddSwiftSetting.swift

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,23 @@ public enum AddSwiftSetting {
9999
throw ManifestEditError.cannotFindTargets
100100
}
101101

102-
guard let targetCall = FunctionCallExprSyntax.findFirst(in: targetArray, matching: {
103-
if let nameArgument = $0.findArgument(labeled: "name"),
104-
let nameLiteral = nameArgument.expression.as(StringLiteralExprSyntax.self),
105-
nameLiteral.representedLiteralValue == target
106-
{
107-
return true
102+
let targetCall = targetArray
103+
.elements
104+
.lazy
105+
.compactMap {
106+
$0.expression.as(FunctionCallExprSyntax.self)
107+
}.first { targetCall in
108+
if let nameArgument = targetCall.findArgument(labeled: "name"),
109+
let nameLiteral = nameArgument.expression.as(StringLiteralExprSyntax.self),
110+
nameLiteral.representedLiteralValue == target
111+
{
112+
return true
113+
}
114+
115+
return false
108116
}
109-
return false
110-
}) else {
117+
118+
guard let targetCall else {
111119
throw ManifestEditError.cannotFindTarget(targetName: target)
112120
}
113121

Tests/PackageModelSyntaxTests/ManifestEditTests.swift

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,50 @@ class ManifestEditTests: XCTestCase {
873873
manifest: manifest
874874
)
875875
}
876+
877+
try assertManifestRefactor("""
878+
// swift-tools-version: 5.8
879+
let package = Package(
880+
name: "packages",
881+
targets: [
882+
.target(
883+
name: "MyTest",
884+
dependencies: [
885+
.byName(name: "Dependency")
886+
]
887+
),
888+
.target(
889+
name: "Dependency"
890+
)
891+
]
892+
)
893+
""",
894+
expectedManifest: """
895+
// swift-tools-version: 5.8
896+
let package = Package(
897+
name: "packages",
898+
targets: [
899+
.target(
900+
name: "MyTest",
901+
dependencies: [
902+
.byName(name: "Dependency")
903+
]
904+
),
905+
.target(
906+
name: "Dependency",
907+
swiftSettings: [
908+
.enableUpcomingFeature("ExistentialAny"),
909+
]
910+
)
911+
]
912+
)
913+
""") { manifest in
914+
try AddSwiftSetting.upcomingFeature(
915+
to: "Dependency",
916+
name: "ExistentialAny",
917+
manifest: manifest
918+
)
919+
}
876920
}
877921
}
878922
/// Assert that applying the moveSingleTargetSources operation to the manifest

0 commit comments

Comments
 (0)