Skip to content

Commit 7262b4c

Browse files
committed
[PackageEditor] Insert the dependencies argument in the correct position in the package initializer
1 parent 95f3fca commit 7262b4c

File tree

2 files changed

+95
-3
lines changed

2 files changed

+95
-3
lines changed

Sources/SPMPackageEditor/ManifestRewriter.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,15 @@ final class DependenciesArrayWriter: SyntaxRewriter {
248248
trailingComma: SyntaxFactory.makeCommaToken()
249249
)
250250

251-
// FIXME: This is not correct, we need to find the
252-
// proper position for inserting `dependencies: []`.
253-
return Syntax(node.inserting(dependenciesArg, at: 1))
251+
252+
let postDependenciesArgumentLabels: Set = ["targets", "swiftLanguageVersions",
253+
"cLanguageStandard", "cxxLanguageStandard"]
254+
let existingLabels = node.map(\.label?.text)
255+
let insertionIndex = existingLabels.firstIndex {
256+
postDependenciesArgumentLabels.contains($0 ?? "")
257+
} ?? existingLabels.endIndex
258+
259+
return Syntax(node.inserting(dependenciesArg, at: insertionIndex))
254260
}
255261
}
256262

Tests/SPMPackageEditorTests/AddPackageDependencyTests.swift

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,4 +267,90 @@ final class AddPackageDependencyTests: XCTestCase {
267267
)
268268
""")
269269
}
270+
271+
func testAddPackageDependency8() throws {
272+
let manifest = """
273+
let package = Package(
274+
name: "exec",
275+
platforms: [.iOS],
276+
targets: [
277+
.target(name: "exec"),
278+
]
279+
)
280+
"""
281+
282+
283+
let editor = try ManifestRewriter(manifest)
284+
try editor.addPackageDependency(
285+
url: "https://github.com/foo/goo",
286+
requirement: .upToNextMajor("1.0.1")
287+
)
288+
289+
XCTAssertEqual(editor.editedManifest, """
290+
let package = Package(
291+
name: "exec",
292+
platforms: [.iOS],
293+
dependencies: [
294+
.package(url: "https://github.com/foo/goo", from: "1.0.1"),
295+
],
296+
targets: [
297+
.target(name: "exec"),
298+
]
299+
)
300+
""")
301+
}
302+
303+
func testAddPackageDependency9() throws {
304+
let manifest = """
305+
let package = Package(
306+
name: "exec",
307+
platforms: [.iOS],
308+
swiftLanguageVersions: []
309+
)
310+
"""
311+
312+
313+
let editor = try ManifestRewriter(manifest)
314+
try editor.addPackageDependency(
315+
url: "https://github.com/foo/goo",
316+
requirement: .upToNextMajor("1.0.1")
317+
)
318+
319+
XCTAssertEqual(editor.editedManifest, """
320+
let package = Package(
321+
name: "exec",
322+
platforms: [.iOS],
323+
dependencies: [
324+
.package(url: "https://github.com/foo/goo", from: "1.0.1"),
325+
],
326+
swiftLanguageVersions: []
327+
)
328+
""")
329+
}
330+
331+
func testAddPackageDependency10() throws {
332+
let manifest = """
333+
let package = Package(
334+
name: "exec",
335+
platforms: [.iOS],
336+
)
337+
"""
338+
339+
340+
let editor = try ManifestRewriter(manifest)
341+
try editor.addPackageDependency(
342+
url: "https://github.com/foo/goo",
343+
requirement: .upToNextMajor("1.0.1")
344+
)
345+
346+
XCTAssertEqual(editor.editedManifest, """
347+
let package = Package(
348+
name: "exec",
349+
platforms: [.iOS],
350+
dependencies: [
351+
.package(url: "https://github.com/foo/goo", from: "1.0.1"),
352+
],
353+
)
354+
""")
355+
}
270356
}

0 commit comments

Comments
 (0)