diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ad1675a6..3af491302 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ### Fixed - `Run multiple times...` and `Run until failure...` will now work when multiple tests are selected ([#1724](https://github.com/swiftlang/vscode-swift/pull/1724)) +- Provide the Swift environment variables when resolving a `swift-plugin` task ([#1727](https://github.com/swiftlang/vscode-swift/pull/1727)) ## 2.8.0 - 2025-07-14 diff --git a/src/tasks/SwiftPluginTaskProvider.ts b/src/tasks/SwiftPluginTaskProvider.ts index 5cc58aaef..ffb02cd9c 100644 --- a/src/tasks/SwiftPluginTaskProvider.ts +++ b/src/tasks/SwiftPluginTaskProvider.ts @@ -102,6 +102,7 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider { "swift-plugin", new SwiftExecution(swift, swiftArgs, { cwd, + env: { ...configuration.swiftEnvironmentVariables, ...swiftRuntimeEnv() }, presentation: task.presentationOptions, }), task.problemMatchers diff --git a/test/unit-tests/tasks/SwiftPluginTaskProvider.test.ts b/test/unit-tests/tasks/SwiftPluginTaskProvider.test.ts index 45ac1087c..9f637eec2 100644 --- a/test/unit-tests/tasks/SwiftPluginTaskProvider.test.ts +++ b/test/unit-tests/tasks/SwiftPluginTaskProvider.test.ts @@ -23,8 +23,9 @@ import { SwiftToolchain } from "../../../src/toolchain/toolchain"; import { SwiftExecution } from "../../../src/tasks/SwiftExecution"; import { Version } from "../../../src/utilities/version"; import { BuildFlags } from "../../../src/toolchain/BuildFlags"; -import { instance, MockedObject, mockFn, mockObject } from "../../MockUtils"; +import { instance, MockedObject, mockFn, mockGlobalValue, mockObject } from "../../MockUtils"; import { FolderContext } from "../../../src/FolderContext"; +import configuration from "../../../src/configuration"; suite("SwiftPluginTaskProvider Unit Test Suite", () => { let workspaceContext: MockedObject; @@ -58,6 +59,14 @@ suite("SwiftPluginTaskProvider Unit Test Suite", () => { }); suite("resolveTask", () => { + const configurationMock = mockGlobalValue(configuration, "swiftEnvironmentVariables"); + + setup(async () => { + configurationMock.setValue({ + FOO: "bar", + }); + }); + test("uses SwiftExecution", async () => { const taskProvider = new SwiftPluginTaskProvider(instance(workspaceContext)); const task = new vscode.Task( @@ -295,5 +304,24 @@ suite("SwiftPluginTaskProvider Unit Test Suite", () => { os.homedir(), ]); }); + + test("provides environment", async () => { + const taskProvider = new SwiftPluginTaskProvider(instance(workspaceContext)); + const task = new vscode.Task( + { + type: "swift", + args: [], + }, + workspaceFolder, + "run PackageExe", + "swift" + ); + const resolvedTask = taskProvider.resolveTask( + task, + new vscode.CancellationTokenSource().token + ); + const swiftExecution = resolvedTask.execution as SwiftExecution; + assert.equal(swiftExecution.options.env?.FOO, "bar"); + }); }); });