diff --git a/src/commands.ts b/src/commands.ts index 8b8dcc3b..e98afe83 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -148,7 +148,7 @@ function commandRegister( new Promise((_, reject) => token.onCancellationRequested((e) => { controller.abort(e); reject(e); - })), + }, null, core.context.subscriptions)), command.run({ progress, token, signal: controller.signal }, ...args), ]); }); diff --git a/src/events/activate.ts b/src/events/activate.ts index 6fcc6544..49dcd57f 100644 --- a/src/events/activate.ts +++ b/src/events/activate.ts @@ -14,7 +14,7 @@ const _discloudStatusBarBehavior = "discloud.status.bar.behavior"; export default async function (core: ExtensionCore, context: ExtensionContext) { queueMicrotask(() => BaseLanguageProvider.startProviders(context).catch(core.logger.error)); - const disposableChangeConfiguration = workspace.onDidChangeConfiguration(event => { + workspace.onDidChangeConfiguration(event => { if (event.affectsConfiguration(_discloudAppSort)) return core.userAppTree.refresh(); if (event.affectsConfiguration(_discloudTeamSort)) return core.teamAppTree.refresh(); @@ -30,18 +30,16 @@ export default async function (core: ExtensionCore, context: ExtensionContext) { } if (event.affectsConfiguration(_discloudStatusBarBehavior)) return core.statusBar.setDefault(); - }); + }, null, context.subscriptions); // Refresh extension when session was removed - const disposableAuthenticationEvent = core.auth.onDidChangeSessions(async (event) => { + core.auth.onDidChangeSessions(async (event) => { if (event.removed?.length) { const session = await core.auth.getSession(); if (!session) core.emit("missingToken", core); return; } - }); - - context.subscriptions.push(disposableChangeConfiguration, disposableAuthenticationEvent); + }, null, context.subscriptions); core.logger.debug("Activate: done"); diff --git a/src/language/CompletionItemProvider.ts b/src/language/CompletionItemProvider.ts index db823622..7a6ee64c 100644 --- a/src/language/CompletionItemProvider.ts +++ b/src/language/CompletionItemProvider.ts @@ -23,7 +23,7 @@ export default class CompletionItemProvider extends BaseLanguageProvider { }, { provideCompletionItems: (document, position, token, _context) => Promise.race([ - new Promise((_, reject) => token.onCancellationRequested(reject)), + new Promise((_, reject) => token.onCancellationRequested(reject, null, context.subscriptions)), this.provideCompletionItems(document, position, token, _context), ]).catch(() => []), }, lineBreakSymbol, arraySeparator, assignSymbol, pathSeparator); diff --git a/src/language/LanguageConfigurationProvider.ts b/src/language/LanguageConfigurationProvider.ts index 58dc9e2f..461d3e5e 100644 --- a/src/language/LanguageConfigurationProvider.ts +++ b/src/language/LanguageConfigurationProvider.ts @@ -15,21 +15,22 @@ export default class LanguageConfigurationProvider extends BaseLanguageProvider this.collection = languages.createDiagnosticCollection(this.schema.$id); - const disposableChange = workspace.onDidChangeTextDocument((event) => { + workspace.onDidChangeTextDocument((event) => { if (event.document.languageId === this.schema.$id) { this.checkDocument(event.document); } - }); + }, null, context.subscriptions); - const disposableClose = workspace.onDidCloseTextDocument((document) => this.collection.delete(document.uri)); + workspace.onDidCloseTextDocument((document) => + this.collection.delete(document.uri), null, context.subscriptions); - const disposableOpen = workspace.onDidOpenTextDocument((document) => { + workspace.onDidOpenTextDocument((document) => { if (document.languageId === this.schema.$id) { this.checkDocument(document); } - }); + }, null, context.subscriptions); - context.subscriptions.push(this.collection, disposableChange, disposableClose, disposableOpen); + context.subscriptions.push(this.collection); queueMicrotask(() => { for (let i = 0; i < workspace.textDocuments.length; i++) { diff --git a/src/output/OutputChannel.ts b/src/output/OutputChannel.ts index 6deedb9f..ccf530fa 100644 --- a/src/output/OutputChannel.ts +++ b/src/output/OutputChannel.ts @@ -8,9 +8,9 @@ export default abstract class DiscloudOutputChannel implements OutputChannel { DiscloudOutputChannel._instances.get(name)?.dispose(delay); } - static getInstance(context: ExtensionContext, name: string) { + static getInstance(context: ExtensionContext, name: string, languageId?: string) { const instance = DiscloudOutputChannel._instances.getOrInsertComputed(name, () => { - const channel = window.createOutputChannel(name); + const channel = window.createOutputChannel(name, languageId); const instance = new _DiscloudOutputChannel(context, channel); context.subscriptions.push(instance); return instance; diff --git a/src/structures/Command.ts b/src/structures/Command.ts index 48383e5e..88b659e2 100644 --- a/src/structures/Command.ts +++ b/src/structures/Command.ts @@ -6,7 +6,7 @@ import type { CommandData, TaskData } from "../@types"; import type ExtensionCore from "../core/extension"; export interface CommandConstructor { - new(...args: any[]): Command + new(core: ExtensionCore): Command } export default abstract class Command { diff --git a/src/structures/DiscloudStatusBarItem.ts b/src/structures/DiscloudStatusBarItem.ts index 1f08a42d..90eb6c36 100644 --- a/src/structures/DiscloudStatusBarItem.ts +++ b/src/structures/DiscloudStatusBarItem.ts @@ -53,7 +53,7 @@ export default class DiscloudStatusBarItem extends BaseStatusBarItem { } let lastWorkspaceFolder!: WorkspaceFolder | undefined; - const disposableChangeActiveTextEditor = window.onDidChangeActiveTextEditor(async (editor) => { + window.onDidChangeActiveTextEditor(async (editor) => { if (this._status !== Status.Regular) return; await sleep(100); @@ -68,28 +68,22 @@ export default class DiscloudStatusBarItem extends BaseStatusBarItem { const folders = workspace.workspaceFolders; if (folders && folders.length > 1) await this.setDefault(); - }); + }, null, this.context.subscriptions); - const disposableOpenTextDocument = workspace.onDidOpenTextDocument((document) => { + workspace.onDidOpenTextDocument((document) => { if (this._status !== Status.Regular) return; if (lastWorkspaceFolder?.uri.fsPath === document.uri.fsPath) return; lastWorkspaceFolder = workspace.getWorkspaceFolder(document.uri); return this.setDefault(document.uri); - }); + }, null, this.context.subscriptions); - const disposableChangeWorkspaceFolders = workspace.onDidChangeWorkspaceFolders(() => { + workspace.onDidChangeWorkspaceFolders(() => { if (this.core.workspaceAvailable) { this.show(); } else { this.hide(); } - }); - - core.context.subscriptions.push( - disposableChangeActiveTextEditor, - disposableOpenTextDocument, - disposableChangeWorkspaceFolders, - ); + }, null, this.context.subscriptions); } protected _status!: Status;