diff --git a/src/annotations/annotationProvider.ts b/src/annotations/annotationProvider.ts index a9efc71..6854c55 100644 --- a/src/annotations/annotationProvider.ts +++ b/src/annotations/annotationProvider.ts @@ -23,7 +23,7 @@ export enum AnnotationStatus { export type TextEditorCorrelationKey = string; -export abstract class AnnotationProviderBase extends Disposable { +export abstract class AnnotationProviderBase implements Disposable { static getCorrelationKey(editor: TextEditor | undefined): TextEditorCorrelationKey { return editor !== undefined ? (editor as any).id : ''; } @@ -42,8 +42,6 @@ export abstract class AnnotationProviderBase extends Disposable { protected decoration: TextEditorDecorationType, protected highlightDecoration: TextEditorDecorationType | undefined ) { - super(() => this.dispose()); - this.correlationKey = AnnotationProviderBase.getCorrelationKey(this.editor); this.document = this.editor.document; diff --git a/src/annotations/fileAnnotationController.ts b/src/annotations/fileAnnotationController.ts index 1571839..4adc8d6 100644 --- a/src/annotations/fileAnnotationController.ts +++ b/src/annotations/fileAnnotationController.ts @@ -55,7 +55,7 @@ export const Decorations = { recentChangesHighlight: undefined as TextEditorDecorationType | undefined }; -export class FileAnnotationController extends Disposable { +export class FileAnnotationController implements Disposable { private _onDidToggleAnnotations = new EventEmitter(); get onDidToggleAnnotations(): Event { return this._onDidToggleAnnotations.event; @@ -70,8 +70,6 @@ export class FileAnnotationController extends Disposable { private _annotationType: FileAnnotationType | undefined = undefined; constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from(configuration.onDidChange(this.onConfigurationChanged, this)); this._toggleModes = new Map(); diff --git a/src/annotations/lineAnnotationController.ts b/src/annotations/lineAnnotationController.ts index e85a58f..4d0e395 100644 --- a/src/annotations/lineAnnotationController.ts +++ b/src/annotations/lineAnnotationController.ts @@ -24,15 +24,13 @@ const annotationDecoration: TextEditorDecorationType = window.createTextEditorDe rangeBehavior: DecorationRangeBehavior.ClosedOpen } as DecorationRenderOptions); -export class LineAnnotationController extends Disposable { +export class LineAnnotationController implements Disposable { private _disposable: Disposable; private _debugSessionEndDisposable: Disposable | undefined; private _editor: TextEditor | undefined; private _enabled: boolean = false; constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from( configuration.onDidChange(this.onConfigurationChanged, this), Container.fileAnnotations.onDidToggleAnnotations(this.onFileAnnotationsToggled, this), diff --git a/src/codelens/codeLensController.ts b/src/codelens/codeLensController.ts index 3ffbaee..7226372 100644 --- a/src/codelens/codeLensController.ts +++ b/src/codelens/codeLensController.ts @@ -11,15 +11,13 @@ import { } from '../trackers/gitDocumentTracker'; import { GitCodeLensProvider } from './gitCodeLensProvider'; -export class CodeLensController extends Disposable { +export class CodeLensController implements Disposable { private _canToggle: boolean = false; private _disposable: Disposable | undefined; private _provider: GitCodeLensProvider | undefined; private _providerDisposable: Disposable | undefined; constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from(configuration.onDidChange(this.onConfigurationChanged, this)); this.onConfigurationChanged(configuration.initializingChangeEvent); } diff --git a/src/commands/common.ts b/src/commands/common.ts index 5ee5277..24a0054 100644 --- a/src/commands/common.ts +++ b/src/commands/common.ts @@ -213,7 +213,7 @@ function isTextEditor(editor: any): editor is TextEditor { ); } -export abstract class Command extends Disposable { +export abstract class Command implements Disposable { static getMarkdownCommandArgsCore(command: Commands, args: T): string { return `command:${command}?${encodeURIComponent(JSON.stringify(args))}`; } @@ -223,8 +223,6 @@ export abstract class Command extends Disposable { private _disposable: Disposable; constructor(command: Commands | Commands[]) { - super(() => this.dispose()); - if (typeof command === 'string') { this._disposable = commands.registerCommand( command, @@ -354,12 +352,10 @@ export abstract class ActiveEditorCachedCommand extends ActiveEditorCommand { abstract execute(editor: TextEditor, ...args: any[]): any; } -export abstract class EditorCommand extends Disposable { +export abstract class EditorCommand implements Disposable { private _disposable: Disposable; constructor(command: Commands | Commands[]) { - super(() => this.dispose()); - if (!Array.isArray(command)) { command = [command]; } diff --git a/src/git/models/repository.ts b/src/git/models/repository.ts index 5c9febc..bec6b06 100644 --- a/src/git/models/repository.ts +++ b/src/git/models/repository.ts @@ -59,7 +59,7 @@ export enum RepositoryStorage { StatusNode = 'statusNode' } -export class Repository extends Disposable { +export class Repository implements Disposable { private _onDidChange = new EventEmitter(); get onDidChange(): Event { return this._onDidChange.event; @@ -95,8 +95,6 @@ export class Repository extends Disposable { suspended: boolean, closed: boolean = false ) { - super(() => this.dispose()); - if (root) { this.formattedName = folder.name; } diff --git a/src/gitService.ts b/src/gitService.ts index 5031e2c..b344313 100644 --- a/src/gitService.ts +++ b/src/gitService.ts @@ -78,7 +78,7 @@ export enum GitRepoSearchBy { Sha = 'sha' } -export class GitService extends Disposable { +export class GitService implements Disposable { static emptyPromise: Promise = Promise.resolve(undefined); static deletedSha = 'ffffffffffffffffffffffffffffffffffffffff'; static stagedUncommittedSha = Git.stagedUncommittedSha; @@ -97,8 +97,6 @@ export class GitService extends Disposable { private _versionedUriCache: Map; constructor() { - super(() => this.dispose()); - this._repositoryTree = TernarySearchTree.forPaths(); this._trackedCache = new Map(); this._versionedUriCache = new Map(); diff --git a/src/hovers/lineHoverController.ts b/src/hovers/lineHoverController.ts index b730288..09b26ce 100644 --- a/src/hovers/lineHoverController.ts +++ b/src/hovers/lineHoverController.ts @@ -18,14 +18,12 @@ import { configuration } from '../configuration'; import { Container } from '../container'; import { LinesChangeEvent } from '../trackers/gitLineTracker'; -export class LineHoverController extends Disposable { +export class LineHoverController implements Disposable { private _debugSessionEndDisposable: Disposable | undefined; private _disposable: Disposable; private _hoverProviderDisposable: Disposable | undefined; constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from( configuration.onDidChange(this.onConfigurationChanged, this), debug.onDidStartDebugSession(this.onDebugSessionStarted, this) diff --git a/src/keyboard.ts b/src/keyboard.ts index 67178d1..3a2eb24 100644 --- a/src/keyboard.ts +++ b/src/keyboard.ts @@ -19,12 +19,10 @@ export declare interface KeyMapping { const mappings: KeyMapping[] = []; -export class KeyboardScope extends Disposable { +export class KeyboardScope implements Disposable { constructor( private readonly mapping: KeyMapping ) { - super(() => this.dispose()); - for (const key in mapping) { mapping[key] = mapping[key] || keyNoopCommand; } @@ -81,12 +79,10 @@ export class KeyboardScope extends Disposable { } } -export class Keyboard extends Disposable { +export class Keyboard implements Disposable { private _disposable: Disposable; constructor() { - super(() => this.dispose()); - const subscriptions = keys.map(key => commands.registerCommand(`${extensionId}.key.${key}`, () => this.execute(key), this) ); diff --git a/src/statusbar/statusBarController.ts b/src/statusbar/statusBarController.ts index db87e49..0e23013 100644 --- a/src/statusbar/statusBarController.ts +++ b/src/statusbar/statusBarController.ts @@ -7,14 +7,12 @@ import { Container } from '../container'; import { CommitFormatter, GitCommit, ICommitFormatOptions } from '../gitService'; import { LinesChangeEvent } from '../trackers/gitLineTracker'; -export class StatusBarController extends Disposable { +export class StatusBarController implements Disposable { private _blameStatusBarItem: StatusBarItem | undefined; private _disposable: Disposable; private _modeStatusBarItem: StatusBarItem | undefined; constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from(configuration.onDidChange(this.onConfigurationChanged, this)); this.onConfigurationChanged(configuration.initializingChangeEvent); } diff --git a/src/trackers/activeEditorTracker.ts b/src/trackers/activeEditorTracker.ts index 0da65a7..bcc0b81 100644 --- a/src/trackers/activeEditorTracker.ts +++ b/src/trackers/activeEditorTracker.ts @@ -3,13 +3,11 @@ import { commands, Disposable, TextEditor, window } from 'vscode'; import { BuiltInCommands } from '../constants'; import { Functions } from '../system'; -export class ActiveEditorTracker extends Disposable { +export class ActiveEditorTracker implements Disposable { private _disposable: Disposable; private _resolver: ((editor: TextEditor | undefined) => void) | undefined; constructor() { - super(() => this.dispose()); - const fn = Functions.debounce((e: TextEditor | undefined) => this._resolver && this._resolver(e), 50); this._disposable = window.onDidChangeActiveTextEditor(fn); } diff --git a/src/trackers/documentTracker.ts b/src/trackers/documentTracker.ts index 277023a..b366d49 100644 --- a/src/trackers/documentTracker.ts +++ b/src/trackers/documentTracker.ts @@ -34,7 +34,7 @@ export interface DocumentDirtyIdleTriggerEvent { readonly document: TrackedDocument; } -export class DocumentTracker extends Disposable { +export class DocumentTracker implements Disposable { private _onDidChangeBlameState = new EventEmitter>(); get onDidChangeBlameState(): Event> { return this._onDidChangeBlameState.event; @@ -55,8 +55,6 @@ export class DocumentTracker extends Disposable { private readonly _documentMap: Map> = new Map(); constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from( configuration.onDidChange(this.onConfigurationChanged, this), window.onDidChangeActiveTextEditor(this.onActiveTextEditorChanged, this), diff --git a/src/trackers/lineTracker.ts b/src/trackers/lineTracker.ts index 152ea36..ae9538b 100644 --- a/src/trackers/lineTracker.ts +++ b/src/trackers/lineTracker.ts @@ -11,7 +11,7 @@ export interface LinesChangeEvent { readonly pending?: boolean; } -export class LineTracker extends Disposable { +export class LineTracker implements Disposable { private _onDidChangeActiveLines = new EventEmitter(); get onDidChangeActiveLines(): Event { return this._onDidChangeActiveLines.event; @@ -22,10 +22,6 @@ export class LineTracker extends Disposable { private readonly _state: Map = new Map(); - constructor() { - super(() => this.dispose()); - } - dispose() { this.stop(); } diff --git a/src/trackers/trackedDocument.ts b/src/trackers/trackedDocument.ts index a10c5ea..d6a1ce4 100644 --- a/src/trackers/trackedDocument.ts +++ b/src/trackers/trackedDocument.ts @@ -12,7 +12,7 @@ export interface DocumentBlameStateChangeEvent { readonly blameable: boolean; } -export class TrackedDocument extends Disposable { +export class TrackedDocument implements Disposable { private _onDidBlameStateChange = new EventEmitter>(); get onDidBlameStateChange(): Event> { return this._onDidBlameStateChange.event; @@ -31,8 +31,6 @@ export class TrackedDocument extends Disposable { public dirty: boolean, private _eventDelegates: { onDidBlameStateChange(e: DocumentBlameStateChangeEvent): void } ) { - super(() => this.dispose()); - this._repo = this.initialize(_document.uri); } diff --git a/src/views/explorerCommands.ts b/src/views/explorerCommands.ts index 02f0166..966add0 100644 --- a/src/views/explorerCommands.ts +++ b/src/views/explorerCommands.ts @@ -41,14 +41,12 @@ interface ICompareSelected { uri?: Uri; } -export class ExplorerCommands extends Disposable { +export class ExplorerCommands implements Disposable { private _disposable: Disposable | undefined; private _terminal: Terminal | undefined; private _terminalCwd: string | undefined; constructor() { - super(() => this.dispose()); - commands.registerCommand('gitlens.explorers.openChanges', this.openChanges, this); commands.registerCommand('gitlens.explorers.openChangesWithWorking', this.openChangesWithWorking, this); commands.registerCommand('gitlens.explorers.openFile', this.openFile, this); diff --git a/src/views/nodes/explorerNode.ts b/src/views/nodes/explorerNode.ts index c0774a8..aff4944 100644 --- a/src/views/nodes/explorerNode.ts +++ b/src/views/nodes/explorerNode.ts @@ -66,7 +66,7 @@ export type Explorer = GitExplorer | HistoryExplorer | ResultsExplorer; // let id = 0; -export abstract class ExplorerNode extends Disposable { +export abstract class ExplorerNode implements Disposable { readonly supportsPaging: boolean = false; maxCount: number | undefined; @@ -77,7 +77,6 @@ export abstract class ExplorerNode extends Disposable { constructor( public readonly uri: GitUri ) { - super(() => this.dispose()); // this.id = id++; } diff --git a/src/views/resultsExplorer.ts b/src/views/resultsExplorer.ts index 172d958..0b57ce9 100644 --- a/src/views/resultsExplorer.ts +++ b/src/views/resultsExplorer.ts @@ -31,7 +31,7 @@ import { export * from './nodes'; -export class ResultsExplorer extends Disposable implements TreeDataProvider { +export class ResultsExplorer implements TreeDataProvider, Disposable { private _disposable: Disposable | undefined; private _roots: ExplorerNode[] = []; private _tree: TreeView | undefined; @@ -42,8 +42,6 @@ export class ResultsExplorer extends Disposable implements TreeDataProvider this.dispose()); - Container.explorerCommands; commands.registerCommand('gitlens.resultsExplorer.refresh', this.refreshNodes, this); commands.registerCommand('gitlens.resultsExplorer.refreshNode', this.refreshNode, this); diff --git a/src/webviews/webviewEditor.ts b/src/webviews/webviewEditor.ts index 760149a..b96e883 100644 --- a/src/webviews/webviewEditor.ts +++ b/src/webviews/webviewEditor.ts @@ -16,14 +16,12 @@ import { Container } from '../container'; import { Logger } from '../logger'; import { Message, SettingsChangedMessage } from '../ui/ipc'; -export abstract class WebviewEditor extends Disposable { +export abstract class WebviewEditor implements Disposable { private _disposable: Disposable | undefined; private _disposablePanel: Disposable | undefined; private _panel: WebviewPanel | undefined; constructor() { - super(() => this.dispose()); - this._disposable = Disposable.from( configuration.onDidChange(this.onConfigurationChanged, this), ...this.registerCommands()