Skip to content

Only have one instance of the plugin provider #1540

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/WorkspaceContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import { DocumentationManager } from "./documentation/DocumentationManager";
import { DocCDocumentationRequest, ReIndexProjectRequest } from "./sourcekit-lsp/extensions";
import { TestKind } from "./TestExplorer/TestKind";
import { isValidWorkspaceFolder, searchForPackages } from "./utilities/workspace";
import { SwiftPluginTaskProvider } from "./tasks/SwiftPluginTaskProvider";

/**
* Context for whole workspace. Holds array of contexts for each workspace folder
Expand All @@ -48,6 +49,7 @@ export class WorkspaceContext implements vscode.Disposable {
public languageClientManager: LanguageClientToolchainCoordinator;
public tasks: TaskManager;
public diagnostics: DiagnosticsManager;
public pluginProvider: SwiftPluginTaskProvider;
public subscriptions: vscode.Disposable[];
public commentCompletionProvider: CommentCompletionProviders;
public documentation: DocumentationManager;
Expand Down Expand Up @@ -76,6 +78,7 @@ export class WorkspaceContext implements vscode.Disposable {
this.languageClientManager = new LanguageClientToolchainCoordinator(this);
this.tasks = new TaskManager(this);
this.diagnostics = new DiagnosticsManager(this);
this.pluginProvider = new SwiftPluginTaskProvider(this);
this.documentation = new DocumentationManager(extensionContext, this);
this.currentDocument = null;
this.commentCompletionProvider = new CommentCompletionProviders();
Expand Down
3 changes: 1 addition & 2 deletions src/commands/runTask.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import * as vscode from "vscode";
import { WorkspaceContext } from "../WorkspaceContext";
import { TaskOperation } from "../tasks/TaskQueue";
import { SwiftPluginTaskProvider } from "../tasks/SwiftPluginTaskProvider";

export const runTask = async (ctx: WorkspaceContext, name: string) => {
if (!ctx.currentFolder) {
Expand All @@ -25,7 +24,7 @@ export const runTask = async (ctx: WorkspaceContext, name: string) => {
const tasks = await vscode.tasks.fetchTasks();
let task = tasks.find(task => task.name === name);
if (!task) {
const pluginTaskProvider = new SwiftPluginTaskProvider(ctx);
const pluginTaskProvider = ctx.pluginProvider;
const pluginTasks = await pluginTaskProvider.provideTasks(
new vscode.CancellationTokenSource().token
);
Expand Down
5 changes: 3 additions & 2 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import { FolderContext } from "./FolderContext";
import { TestExplorer } from "./TestExplorer/TestExplorer";
import { LanguageStatusItems } from "./ui/LanguageStatusItems";
import { getErrorDescription } from "./utilities/utilities";
import { SwiftPluginTaskProvider } from "./tasks/SwiftPluginTaskProvider";
import { Version } from "./utilities/version";
import { getReadOnlyDocumentProvider } from "./ui/ReadOnlyDocumentProvider";
import { registerDebugger } from "./debugger/debugAdapterFactory";
Expand Down Expand Up @@ -100,7 +99,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<Api> {
context.subscriptions.push(SwiftTaskProvider.register(workspaceContext));

// Register swift plugin task provider.
context.subscriptions.push(SwiftPluginTaskProvider.register(workspaceContext));
context.subscriptions.push(
vscode.tasks.registerTaskProvider("swift-plugin", workspaceContext.pluginProvider)
);

// Register the language status bar items.
context.subscriptions.push(new LanguageStatusItems(workspaceContext));
Expand Down
9 changes: 0 additions & 9 deletions src/tasks/SwiftPluginTaskProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,13 +281,4 @@ export class SwiftPluginTaskProvider implements vscode.TaskProvider {
}
return args;
}

/**
* Registers the Swift plugin task provider with VS Code.
* @param ctx The workspace context.
* @returns A disposable that unregisters the provider when disposed.
*/
public static register(ctx: WorkspaceContext): vscode.Disposable {
return vscode.tasks.registerTaskProvider("swift-plugin", new SwiftPluginTaskProvider(ctx));
}
}
3 changes: 1 addition & 2 deletions src/ui/ProjectPanelProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import { WorkspaceContext } from "../WorkspaceContext";
import { FolderOperation } from "../WorkspaceContext";
import contextKeys from "../contextKeys";
import { Dependency, ResolvedDependency, Target } from "../SwiftPackage";
import { SwiftPluginTaskProvider } from "../tasks/SwiftPluginTaskProvider";
import { FolderContext } from "../FolderContext";

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

private async commands(): Promise<TreeNode[]> {
const provider = new SwiftPluginTaskProvider(this.workspaceContext);
const provider = this.workspaceContext.pluginProvider;
const tasks = await provider.provideTasks(new vscode.CancellationTokenSource().token);
return tasks
.map(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ suite("SwiftPluginTaskProvider Test Suite", function () {
let taskProvider: SwiftPluginTaskProvider;

setup(() => {
taskProvider = new SwiftPluginTaskProvider(workspaceContext);
taskProvider = workspaceContext.pluginProvider;
});

test("Exit code on success", async () => {
Expand Down
Loading