Skip to content

Commit c87190c

Browse files
authored
Only have one instance of the plugin provider (#1540)
Seems to be causing test failures because a different instance of the provider is used to resolve
1 parent 576a7c7 commit c87190c

File tree

6 files changed

+9
-16
lines changed

6 files changed

+9
-16
lines changed

src/WorkspaceContext.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { DocumentationManager } from "./documentation/DocumentationManager";
3434
import { DocCDocumentationRequest, ReIndexProjectRequest } from "./sourcekit-lsp/extensions";
3535
import { TestKind } from "./TestExplorer/TestKind";
3636
import { isValidWorkspaceFolder, searchForPackages } from "./utilities/workspace";
37+
import { SwiftPluginTaskProvider } from "./tasks/SwiftPluginTaskProvider";
3738

3839
/**
3940
* Context for whole workspace. Holds array of contexts for each workspace folder
@@ -48,6 +49,7 @@ export class WorkspaceContext implements vscode.Disposable {
4849
public languageClientManager: LanguageClientToolchainCoordinator;
4950
public tasks: TaskManager;
5051
public diagnostics: DiagnosticsManager;
52+
public pluginProvider: SwiftPluginTaskProvider;
5153
public subscriptions: vscode.Disposable[];
5254
public commentCompletionProvider: CommentCompletionProviders;
5355
public documentation: DocumentationManager;
@@ -76,6 +78,7 @@ export class WorkspaceContext implements vscode.Disposable {
7678
this.languageClientManager = new LanguageClientToolchainCoordinator(this);
7779
this.tasks = new TaskManager(this);
7880
this.diagnostics = new DiagnosticsManager(this);
81+
this.pluginProvider = new SwiftPluginTaskProvider(this);
7982
this.documentation = new DocumentationManager(extensionContext, this);
8083
this.currentDocument = null;
8184
this.commentCompletionProvider = new CommentCompletionProviders();

src/commands/runTask.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import * as vscode from "vscode";
1616
import { WorkspaceContext } from "../WorkspaceContext";
1717
import { TaskOperation } from "../tasks/TaskQueue";
18-
import { SwiftPluginTaskProvider } from "../tasks/SwiftPluginTaskProvider";
1918

2019
export const runTask = async (ctx: WorkspaceContext, name: string) => {
2120
if (!ctx.currentFolder) {
@@ -25,7 +24,7 @@ export const runTask = async (ctx: WorkspaceContext, name: string) => {
2524
const tasks = await vscode.tasks.fetchTasks();
2625
let task = tasks.find(task => task.name === name);
2726
if (!task) {
28-
const pluginTaskProvider = new SwiftPluginTaskProvider(ctx);
27+
const pluginTaskProvider = ctx.pluginProvider;
2928
const pluginTasks = await pluginTaskProvider.provideTasks(
3029
new vscode.CancellationTokenSource().token
3130
);

src/extension.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import { FolderContext } from "./FolderContext";
2525
import { TestExplorer } from "./TestExplorer/TestExplorer";
2626
import { LanguageStatusItems } from "./ui/LanguageStatusItems";
2727
import { getErrorDescription } from "./utilities/utilities";
28-
import { SwiftPluginTaskProvider } from "./tasks/SwiftPluginTaskProvider";
2928
import { Version } from "./utilities/version";
3029
import { getReadOnlyDocumentProvider } from "./ui/ReadOnlyDocumentProvider";
3130
import { registerDebugger } from "./debugger/debugAdapterFactory";
@@ -100,7 +99,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<Api> {
10099
context.subscriptions.push(SwiftTaskProvider.register(workspaceContext));
101100

102101
// Register swift plugin task provider.
103-
context.subscriptions.push(SwiftPluginTaskProvider.register(workspaceContext));
102+
context.subscriptions.push(
103+
vscode.tasks.registerTaskProvider("swift-plugin", workspaceContext.pluginProvider)
104+
);
104105

105106
// Register the language status bar items.
106107
context.subscriptions.push(new LanguageStatusItems(workspaceContext));

src/tasks/SwiftPluginTaskProvider.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -281,13 +281,4 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider {
281281
}
282282
return args;
283283
}
284-
285-
/**
286-
* Registers the Swift plugin task provider with VS Code.
287-
* @param ctx The workspace context.
288-
* @returns A disposable that unregisters the provider when disposed.
289-
*/
290-
public static register(ctx: WorkspaceContext): vscode.Disposable {
291-
return vscode.tasks.registerTaskProvider("swift-plugin", new SwiftPluginTaskProvider(ctx));
292-
}
293284
}

src/ui/ProjectPanelProvider.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { WorkspaceContext } from "../WorkspaceContext";
2020
import { FolderOperation } from "../WorkspaceContext";
2121
import contextKeys from "../contextKeys";
2222
import { Dependency, ResolvedDependency, Target } from "../SwiftPackage";
23-
import { SwiftPluginTaskProvider } from "../tasks/SwiftPluginTaskProvider";
2423
import { FolderContext } from "../FolderContext";
2524

2625
const LOADING_ICON = "loading~spin";
@@ -598,7 +597,7 @@ export class ProjectPanelProvider implements vscode.TreeDataProvider<TreeNode> {
598597
}
599598

600599
private async commands(): Promise<TreeNode[]> {
601-
const provider = new SwiftPluginTaskProvider(this.workspaceContext);
600+
const provider = this.workspaceContext.pluginProvider;
602601
const tasks = await provider.provideTasks(new vscode.CancellationTokenSource().token);
603602
return tasks
604603
.map(

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ suite("SwiftPluginTaskProvider Test Suite", function () {
199199
let taskProvider: SwiftPluginTaskProvider;
200200

201201
setup(() => {
202-
taskProvider = new SwiftPluginTaskProvider(workspaceContext);
202+
taskProvider = workspaceContext.pluginProvider;
203203
});
204204

205205
test("Exit code on success", async () => {

0 commit comments

Comments
 (0)