From 9456c0b2d34faf1cd53dd8fb450eff73db936561 Mon Sep 17 00:00:00 2001 From: Bruno Henrique da Rocha e Silva Date: Thu, 18 Dec 2025 09:47:02 +0100 Subject: [PATCH] Fix SwiftPM's dropdown showing on projects disabling the SwiftPM integration --- CHANGELOG.md | 1 + src/SwiftPackage.ts | 15 ++++++++------- test/integration-tests/SwiftPackage.test.ts | 11 ++++++----- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a22603d6..6cd79b7ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Fixed - Fix the wrong toolchain being shown as selected when using swiftly v1.0.1 ([#2014](https://github.com/swiftlang/vscode-swift/pull/2014)) +- Fix extension displaying SwiftPM's project view and automatic build tasks even when `disableSwiftPMIntegration` was true ([#2011](https://github.com/swiftlang/vscode-swift/pull/2011)) ## 2.14.3 - 2025-12-15 diff --git a/src/SwiftPackage.ts b/src/SwiftPackage.ts index ed526aef1..dbcfc46bb 100644 --- a/src/SwiftPackage.ts +++ b/src/SwiftPackage.ts @@ -180,10 +180,16 @@ export interface PackagePlugin { type SwiftPackageState = PackageContents | Error | undefined; function isPackage(state: SwiftPackageState): state is PackageContents { + if (state === undefined) { + return false; + } return (state as PackageContents).products !== undefined; } function isError(state: SwiftPackageState): state is Error { + if (state === undefined) { + return false; + } return state instanceof Error; } @@ -262,14 +268,9 @@ export class SwiftPackage { toolchain: SwiftToolchain, disableSwiftPMIntegration: boolean = false ): Promise { - // When SwiftPM integration is disabled, return empty package structure + // When SwiftPM integration is disabled, return undefined to disable all features if (disableSwiftPMIntegration) { - return { - name: path.basename(folder.fsPath), - products: [], - dependencies: [], - targets: [], - }; + return undefined; } try { diff --git a/test/integration-tests/SwiftPackage.test.ts b/test/integration-tests/SwiftPackage.test.ts index 5ee77fd86..6ee6d7b59 100644 --- a/test/integration-tests/SwiftPackage.test.ts +++ b/test/integration-tests/SwiftPackage.test.ts @@ -81,21 +81,21 @@ tag("medium").suite("SwiftPackage Test Suite", function () { assert.strictEqual(spmPackage.resolved.pins[0].identity, "swift-log"); }); - test("Disabled SwiftPM integration returns empty package", async () => { + test("Disabled SwiftPM integration returns undefined package", async () => { const spmPackage = await SwiftPackage.create( testAssetUri("package2"), toolchain, true // disableSwiftPMIntegration ); - assert.strictEqual(await spmPackage.isValid, true); - assert.strictEqual(await spmPackage.name, "package2"); // derived from folder name + assert.strictEqual(await spmPackage.isValid, false); + assert.strictEqual(await spmPackage.foundPackage, false); assert.strictEqual((await spmPackage.executableProducts).length, 0); assert.strictEqual((await spmPackage.libraryProducts).length, 0); assert.strictEqual((await spmPackage.dependencies).length, 0); assert.strictEqual((await spmPackage.targets).length, 0); }); - test("Reload with disabled SwiftPM integration returns empty package", async () => { + test("Reload with disabled SwiftPM integration returns undefined package", async () => { const spmPackage = await SwiftPackage.create(testAssetUri("package2"), toolchain, false); // First verify it loaded normally assert.strictEqual(await spmPackage.isValid, true); @@ -103,7 +103,8 @@ tag("medium").suite("SwiftPackage Test Suite", function () { // Now reload with disabled integration await spmPackage.reload(toolchain, true); - assert.strictEqual(await spmPackage.isValid, true); + assert.strictEqual(await spmPackage.isValid, false); + assert.strictEqual(await spmPackage.foundPackage, false); assert.strictEqual((await spmPackage.libraryProducts).length, 0); assert.strictEqual((await spmPackage.dependencies).length, 0); assert.strictEqual((await spmPackage.targets).length, 0);