Skip to content

Commit 53e4639

Browse files
committed
Avoid situation where a postfix is appended twice in status bar
1 parent 397bad1 commit 53e4639

File tree

12 files changed

+51
-68
lines changed

12 files changed

+51
-68
lines changed

src/TestExplorer/TestRunner.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import { reduceTestItemChildren } from "./TestUtils";
5151
import { CompositeCancellationToken } from "../utilities/cancellation";
5252
// eslint-disable-next-line @typescript-eslint/no-require-imports
5353
import stripAnsi = require("strip-ansi");
54+
import { packageName } from "../utilities/tasks";
5455

5556
export enum TestLibrary {
5657
xctest = "XCTest",
@@ -771,7 +772,7 @@ export class TestRunner {
771772
{
772773
cwd: this.folderContext.folder,
773774
scope: this.folderContext.workspaceFolder,
774-
prefix: this.folderContext.name,
775+
packageName: packageName(this.folderContext),
775776
presentationOptions: { reveal: vscode.TaskRevealKind.Never },
776777
},
777778
this.folderContext.toolchain,

src/commands/build.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { debugLaunchConfig, getLaunchConfiguration } from "../debugger/launch";
1919
import { executeTaskWithUI } from "./utilities";
2020
import { FolderContext } from "../FolderContext";
2121
import { Target } from "../SwiftPackage";
22+
import { packageName } from "../utilities/tasks";
2223

2324
/**
2425
* Executes a {@link vscode.Task task} to run swift target.
@@ -56,7 +57,7 @@ export async function folderCleanBuild(folderContext: FolderContext) {
5657
{
5758
cwd: folderContext.folder,
5859
scope: folderContext.workspaceFolder,
59-
prefix: folderContext.name,
60+
packageName: packageName(folderContext),
6061
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
6162
group: vscode.TaskGroup.Clean,
6263
},

src/commands/dependencies/edit.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import * as vscode from "vscode";
1616
import { createSwiftTask } from "../../tasks/SwiftTaskProvider";
1717
import { FolderOperation, WorkspaceContext } from "../../WorkspaceContext";
1818
import { executeTaskWithUI } from "../utilities";
19+
import { packageName } from "../../utilities/tasks";
1920

2021
/**
2122
* Setup package dependency to be edited
@@ -34,7 +35,7 @@ export async function editDependency(identifier: string, ctx: WorkspaceContext)
3435
{
3536
scope: currentFolder.workspaceFolder,
3637
cwd: currentFolder.folder,
37-
prefix: currentFolder.name,
38+
packageName: packageName(currentFolder),
3839
},
3940
currentFolder.toolchain
4041
);

src/commands/dependencies/resolve.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { FolderContext } from "../../FolderContext";
1717
import { createSwiftTask, SwiftTaskProvider } from "../../tasks/SwiftTaskProvider";
1818
import { WorkspaceContext } from "../../WorkspaceContext";
1919
import { executeTaskWithUI, updateAfterError } from "../utilities";
20+
import { packageName } from "../../utilities/tasks";
2021

2122
/**
2223
* Executes a {@link vscode.Task task} to resolve this package's dependencies.
@@ -43,7 +44,7 @@ export async function resolveFolderDependencies(
4344
{
4445
cwd: folderContext.folder,
4546
scope: folderContext.workspaceFolder,
46-
prefix: folderContext.name,
47+
packageName: packageName(folderContext),
4748
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
4849
},
4950
folderContext.toolchain

src/commands/dependencies/update.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { FolderContext } from "../../FolderContext";
1717
import { WorkspaceContext } from "../../WorkspaceContext";
1818
import { createSwiftTask, SwiftTaskProvider } from "../../tasks/SwiftTaskProvider";
1919
import { executeTaskWithUI, updateAfterError } from "./../utilities";
20+
import { packageName } from "../../utilities/tasks";
2021

2122
/**
2223
* Executes a {@link vscode.Task task} to update this package's dependencies.
@@ -41,7 +42,7 @@ export async function updateFolderDependencies(folderContext: FolderContext) {
4142
{
4243
cwd: folderContext.folder,
4344
scope: folderContext.workspaceFolder,
44-
prefix: folderContext.name,
45+
packageName: packageName(folderContext),
4546
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
4647
},
4748
folderContext.toolchain

src/commands/dependencies/useLocal.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import * as vscode from "vscode";
1616
import { FolderOperation, WorkspaceContext } from "../../WorkspaceContext";
1717
import { createSwiftTask } from "../../tasks/SwiftTaskProvider";
1818
import { executeTaskWithUI } from "../utilities";
19+
import { packageName } from "../../utilities/tasks";
1920

2021
/**
2122
* Use local version of package dependency
@@ -61,7 +62,7 @@ export async function useLocalDependency(
6162
{
6263
scope: currentFolder.workspaceFolder,
6364
cwd: currentFolder.folder,
64-
prefix: currentFolder.name,
65+
packageName: packageName(currentFolder),
6566
},
6667
currentFolder.toolchain
6768
);

src/commands/resetPackage.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { FolderContext } from "../FolderContext";
1717
import { createSwiftTask, SwiftTaskProvider } from "../tasks/SwiftTaskProvider";
1818
import { WorkspaceContext } from "../WorkspaceContext";
1919
import { executeTaskWithUI } from "./utilities";
20+
import { packageName } from "../utilities/tasks";
2021

2122
/**
2223
* Executes a {@link vscode.Task task} to reset the complete cache/build directory.
@@ -40,7 +41,7 @@ export async function folderResetPackage(folderContext: FolderContext) {
4041
{
4142
cwd: folderContext.folder,
4243
scope: folderContext.workspaceFolder,
43-
prefix: folderContext.name,
44+
packageName: packageName(folderContext),
4445
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
4546
group: vscode.TaskGroup.Clean,
4647
},
@@ -58,7 +59,7 @@ export async function folderResetPackage(folderContext: FolderContext) {
5859
{
5960
cwd: folderContext.folder,
6061
scope: folderContext.workspaceFolder,
61-
prefix: folderContext.name,
62+
packageName: packageName(folderContext),
6263
presentationOptions: { reveal: vscode.TaskRevealKind.Silent },
6364
},
6465
folderContext.toolchain

src/tasks/SwiftPluginTaskProvider.ts

Lines changed: 11 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { WorkspaceContext } from "../WorkspaceContext";
1818
import { PackagePlugin } from "../SwiftPackage";
1919
import { swiftRuntimeEnv } from "../utilities/utilities";
2020
import { SwiftExecution } from "../tasks/SwiftExecution";
21-
import { resolveTaskCwd } from "../utilities/tasks";
21+
import { packageName, resolveTaskCwd } from "../utilities/tasks";
2222
import configuration, {
2323
PluginPermissionConfiguration,
2424
substituteVariablesInString,
@@ -31,7 +31,7 @@ interface TaskConfig {
3131
cwd: vscode.Uri;
3232
scope: vscode.WorkspaceFolder;
3333
presentationOptions?: vscode.TaskPresentationOptions;
34-
prefix?: string;
34+
packageName?: string;
3535
}
3636

3737
/**
@@ -54,26 +54,16 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider {
5454
const tasks = [];
5555

5656
for (const folderContext of this.workspaceContext.folders) {
57-
let postfix = "";
5857
for (const plugin of folderContext.swiftPackage.plugins) {
59-
if (vscode.workspace.workspaceFile) {
60-
postfix = ` (${folderContext.name})`;
61-
} else if (folderContext.relativePath.length > 0) {
62-
postfix = ` (${folderContext.relativePath})`;
63-
}
6458
tasks.push(
65-
this.createSwiftPluginTask(
66-
plugin,
67-
folderContext.toolchain,
68-
{
69-
cwd: folderContext.folder,
70-
scope: folderContext.workspaceFolder,
71-
presentationOptions: {
72-
reveal: vscode.TaskRevealKind.Always,
73-
},
59+
this.createSwiftPluginTask(plugin, folderContext.toolchain, {
60+
cwd: folderContext.folder,
61+
scope: folderContext.workspaceFolder,
62+
presentationOptions: {
63+
reveal: vscode.TaskRevealKind.Always,
7464
},
75-
postfix
76-
)
65+
packageName: packageName(folderContext),
66+
})
7767
);
7868
}
7969
}
@@ -132,8 +122,7 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider {
132122
createSwiftPluginTask(
133123
plugin: PackagePlugin,
134124
toolchain: SwiftToolchain,
135-
config: TaskConfig,
136-
postfix: string = ""
125+
config: TaskConfig
137126
): SwiftTask {
138127
const swift = toolchain.getToolchainExecutable("swift");
139128

@@ -162,13 +151,7 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider {
162151
}),
163152
[]
164153
);
165-
let prefix: string;
166-
if (config.prefix) {
167-
prefix = `(${config.prefix}) `;
168-
} else {
169-
prefix = "";
170-
}
171-
task.detail = `${prefix}swift ${swiftArgs.join(" ")}${postfix}`;
154+
task.detail = `swift ${swiftArgs.join(" ")}`;
172155
task.presentationOptions = presentation;
173156
return task as SwiftTask;
174157
}

src/tasks/SwiftTaskProvider.ts

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { swiftRuntimeEnv } from "../utilities/utilities";
2424
import { Version } from "../utilities/version";
2525
import { SwiftToolchain } from "../toolchain/toolchain";
2626
import { SwiftExecution } from "../tasks/SwiftExecution";
27-
import { resolveTaskCwd } from "../utilities/tasks";
27+
import { packageName, resolveTaskCwd } from "../utilities/tasks";
2828
import { BuildConfigurationFactory } from "../debugger/buildConfig";
2929

3030
/**
@@ -44,7 +44,7 @@ interface TaskConfig {
4444
scope: vscode.TaskScope | vscode.WorkspaceFolder;
4545
group?: vscode.TaskGroup;
4646
presentationOptions?: vscode.TaskPresentationOptions;
47-
prefix?: string;
47+
packageName?: string;
4848
disableTaskQueue?: boolean;
4949
dontTriggerTestDiscovery?: boolean;
5050
showBuildStatus?: ShowBuildStatusOptions;
@@ -139,10 +139,9 @@ function buildAllTaskName(folderContext: FolderContext, release: boolean): strin
139139
let buildTaskName = release
140140
? `${SwiftTaskProvider.buildAllName} - Release`
141141
: SwiftTaskProvider.buildAllName;
142-
if (vscode.workspace.workspaceFile) {
143-
buildTaskName += ` (${folderContext.name})`;
144-
} else if (folderContext.relativePath.length > 0) {
145-
buildTaskName += ` (${folderContext.relativePath})`;
142+
const packageNamePostfix = packageName(folderContext);
143+
if (packageNamePostfix) {
144+
buildTaskName += ` (${packageNamePostfix})`;
146145
}
147146
return buildTaskName;
148147
}
@@ -241,14 +240,7 @@ export async function getBuildAllTask(
241240
*/
242241
function createBuildTasks(product: Product, folderContext: FolderContext): vscode.Task[] {
243242
const toolchain = folderContext.toolchain;
244-
let buildTaskNameSuffix = "";
245-
if (vscode.workspace.workspaceFile) {
246-
buildTaskNameSuffix = ` (${folderContext.name})`;
247-
} else if (folderContext.relativePath.length > 0) {
248-
buildTaskNameSuffix = ` (${folderContext.relativePath})`;
249-
}
250-
251-
const buildDebugName = `Build Debug ${product.name}${buildTaskNameSuffix}`;
243+
const buildDebugName = `Build Debug ${product.name}`;
252244
const buildDebugTask = createSwiftTask(
253245
["build", "--product", product.name, ...buildOptions(toolchain)],
254246
buildDebugName,
@@ -259,24 +251,26 @@ function createBuildTasks(product: Product, folderContext: FolderContext): vscod
259251
presentationOptions: {
260252
reveal: getBuildRevealOption(),
261253
},
254+
packageName: packageName(folderContext),
262255
disableTaskQueue: true,
263256
dontTriggerTestDiscovery: true,
264257
},
265258
folderContext.toolchain
266259
);
267260
const buildDebug = buildAllTaskCache.get(buildDebugName, folderContext, buildDebugTask);
268261

269-
const buildReleaseName = `Build Release ${product.name}${buildTaskNameSuffix}`;
262+
const buildReleaseName = `Build Release ${product.name}`;
270263
const buildReleaseTask = createSwiftTask(
271264
["build", "-c", "release", "--product", product.name, ...buildOptions(toolchain, false)],
272-
`Build Release ${product.name}${buildTaskNameSuffix}`,
265+
`Build Release ${product.name}`,
273266
{
274267
group: vscode.TaskGroup.Build,
275268
cwd: folderContext.folder,
276269
scope: folderContext.workspaceFolder,
277270
presentationOptions: {
278271
reveal: getBuildRevealOption(),
279272
},
273+
packageName: packageName(folderContext),
280274
disableTaskQueue: true,
281275
dontTriggerTestDiscovery: true,
282276
},
@@ -317,6 +311,9 @@ export function createSwiftTask(
317311
}*/
318312
const env = { ...configuration.swiftEnvironmentVariables, ...swiftRuntimeEnv(), ...cmdEnv };
319313
const presentation = config?.presentationOptions ?? {};
314+
if (config?.packageName) {
315+
name += ` (${config?.packageName})`;
316+
}
320317
const task = new vscode.Task(
321318
{
322319
type: "swift",
@@ -345,14 +342,7 @@ export function createSwiftTask(
345342
);
346343
// This doesn't include any quotes added by VS Code.
347344
// See also: https://github.com/microsoft/vscode/issues/137895
348-
349-
let prefix: string;
350-
if (config?.prefix) {
351-
prefix = `(${config.prefix}) `;
352-
} else {
353-
prefix = "";
354-
}
355-
task.detail = `${prefix}swift ${args.join(" ")}`;
345+
task.detail = `swift ${args.join(" ")}`;
356346
task.group = config?.group;
357347
task.presentationOptions = presentation;
358348
return task as SwiftTask;

src/ui/StatusItem.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,12 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
import * as vscode from "vscode";
16-
import * as path from "path";
1716

1817
export class RunningTask {
1918
constructor(public task: vscode.Task | string) {}
2019
get name(): string {
2120
if (typeof this.task !== "string") {
22-
const folder = this.task.definition.cwd as string;
23-
if (folder) {
24-
return `${this.task.name} (${path.basename(folder)})`;
25-
} else {
26-
return this.task.name;
27-
}
21+
return this.task.name;
2822
} else {
2923
return this.task;
3024
}

src/utilities/tasks.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import * as path from "path";
1515
import * as vscode from "vscode";
1616
import { substituteVariablesInString } from "../configuration";
17+
import { FolderContext } from "../FolderContext";
1718

1819
export function resolveTaskCwd(task: vscode.Task, cwd?: string): string | undefined {
1920
const scopeWorkspaceFolder = getScopeWorkspaceFolder(task);
@@ -56,3 +57,11 @@ export function checkIfBuildComplete(line: string): boolean {
5657
}
5758
return false;
5859
}
60+
61+
export function packageName(folderContext: FolderContext): string | undefined {
62+
if (vscode.workspace.workspaceFile) {
63+
return folderContext.name;
64+
} else if (folderContext.relativePath.length > 0) {
65+
return folderContext.relativePath;
66+
}
67+
}

test/integration-tests/tasks/SwiftPluginTaskProvider.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ suite("SwiftPluginTaskProvider Test Suite", function () {
245245
});
246246

247247
test("provides", () => {
248-
expect(task?.detail).to.equal("swift package command_plugin (command-plugin)");
248+
expect(task?.detail).to.equal("swift package command_plugin");
249249
expect(task?.execution.args).to.deep.equal(
250250
folderContext.toolchain.buildFlags.withAdditionalFlags([
251251
"package",

0 commit comments

Comments
 (0)