diff --git a/extensions/github/src/commands.ts b/extensions/github/src/commands.ts index dad2982533c..42ed8198287 100644 --- a/extensions/github/src/commands.ts +++ b/extensions/github/src/commands.ts @@ -6,12 +6,12 @@ import * as vscode from 'vscode'; import { API as GitAPI } from './typings/git'; import { publishRepository } from './publish'; -import { combinedDisposable } from './util'; +import { DisposableStore } from './util'; export function registerCommands(gitAPI: GitAPI): vscode.Disposable { - const disposables: vscode.Disposable[] = []; + const disposables = new DisposableStore(); - disposables.push(vscode.commands.registerCommand('github.publish', async () => { + disposables.add(vscode.commands.registerCommand('github.publish', async () => { try { publishRepository(gitAPI); } catch (err) { @@ -19,5 +19,5 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { } })); - return combinedDisposable(disposables); + return disposables; } diff --git a/extensions/github/src/extension.ts b/extensions/github/src/extension.ts index 4e25bad1313..2fbe1d597fd 100644 --- a/extensions/github/src/extension.ts +++ b/extensions/github/src/extension.ts @@ -8,7 +8,7 @@ import { GithubRemoteSourceProvider } from './remoteSourceProvider'; import { GitExtension } from './typings/git'; import { registerCommands } from './commands'; import { GithubCredentialProviderManager } from './credentialProvider'; -import { dispose, combinedDisposable } from './util'; +import { DisposableStore } from './util'; import { GithubPushErrorHandler } from './pushErrorHandler'; import { GitBaseExtension } from './typings/git-base'; import { GithubRemoteSourcePublisher } from './remoteSourcePublisher'; @@ -19,7 +19,7 @@ export function activate(context: ExtensionContext): void { } function initializeGitBaseExtension(): Disposable { - const disposables = new Set(); + const disposables = new DisposableStore(); const initialize = () => { try { @@ -35,8 +35,7 @@ function initializeGitBaseExtension(): Disposable { const onDidChangeGitBaseExtensionEnablement = (enabled: boolean) => { if (!enabled) { - dispose(disposables); - disposables.clear(); + disposables.dispose(); } else { initialize(); } @@ -46,11 +45,11 @@ function initializeGitBaseExtension(): Disposable { disposables.add(gitBaseExtension.onDidChangeEnablement(onDidChangeGitBaseExtensionEnablement)); onDidChangeGitBaseExtensionEnablement(gitBaseExtension.enabled); - return combinedDisposable(disposables); + return disposables; } function initializeGitExtension(): Disposable { - const disposables = new Set(); + const disposables = new DisposableStore(); let gitExtension = extensions.getExtension('vscode.git'); @@ -68,8 +67,7 @@ function initializeGitExtension(): Disposable { commands.executeCommand('setContext', 'git-base.gitEnabled', true); } else { - dispose(disposables); - disposables.clear(); + disposables.dispose(); } }; @@ -81,16 +79,15 @@ function initializeGitExtension(): Disposable { if (gitExtension) { initialize(); } else { - const disposable = extensions.onDidChange(() => { + const listener = extensions.onDidChange(() => { if (!gitExtension && extensions.getExtension('vscode.git')) { gitExtension = extensions.getExtension('vscode.git'); initialize(); - - dispose(disposable); + listener.dispose(); } }); - disposables.add(disposable); + disposables.add(listener); } - return combinedDisposable(disposables); + return disposables; } diff --git a/extensions/github/src/util.ts b/extensions/github/src/util.ts index 60badd28c84..c7d23a82301 100644 --- a/extensions/github/src/util.ts +++ b/extensions/github/src/util.ts @@ -5,20 +5,19 @@ import * as vscode from 'vscode'; -export function dispose(arg: vscode.Disposable | Iterable): void { - if (arg instanceof vscode.Disposable) { - arg.dispose(); - } else { - for (const disposable of arg) { +export class DisposableStore { + + private disposables = new Set(); + + add(disposable: vscode.Disposable): void { + this.disposables.add(disposable); + } + + dispose(): void { + for (const disposable of this.disposables) { disposable.dispose(); } + + this.disposables.clear(); } } - -export function combinedDisposable(disposables: Iterable): vscode.Disposable { - return { - dispose() { - dispose(disposables); - } - }; -}