Skip to content

Commit

Permalink
vscode: Properly dispose quick diff providers (#174586)
Browse files Browse the repository at this point in the history
Commit: 713d6e2a603ff220e14c0479f9e340e835a916a5
  • Loading branch information
Alex Ross authored and sourcegraph-bot committed Feb 16, 2023
1 parent 66322a9 commit f692fbe
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 3 deletions.
5 changes: 4 additions & 1 deletion vscode/src/vs/workbench/api/common/extHostQuickDiff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ export class ExtHostQuickDiff implements ExtHostQuickDiffShape {
this.providers.set(handle, quickDiffProvider);
this.proxy.$registerQuickDiffProvider(handle, DocumentSelector.from(selector, this.uriTransformer), label, rootUri);
return {
dispose: () => this.providers.delete(handle)
dispose: () => {
this.proxy.$unregisterQuickDiffProvider(handle);
this.providers.delete(handle);
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1253,6 +1253,7 @@ export class DirtyDiffModel extends Disposable {
this.triggerDiff();
}));

this._register(this.quickDiffService.onDidChangeQuickDiffProviders(() => this.triggerDiff()));
this.triggerDiff();
}

Expand Down
2 changes: 2 additions & 0 deletions vscode/src/vs/workbench/contrib/scm/common/quickDiff.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { URI } from 'vs/base/common/uri';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IDisposable } from 'vs/base/common/lifecycle';
import { LanguageSelector } from 'vs/editor/common/languageSelector';
import { Event } from 'vs/base/common/event';

export const IQuickDiffService = createDecorator<IQuickDiffService>('quickDiff');

Expand All @@ -25,6 +26,7 @@ export interface QuickDiff {
export interface IQuickDiffService {
readonly _serviceBrand: undefined;

readonly onDidChangeQuickDiffProviders: Event<void>;
addQuickDiffProvider(quickDiff: QuickDiffProvider): IDisposable;
getQuickDiffs(uri: URI, language?: string, isSynchronized?: boolean): Promise<QuickDiff[]>;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
*--------------------------------------------------------------------------------------------*/

import { URI } from 'vs/base/common/uri';
import { IDisposable } from 'vs/base/common/lifecycle';
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { IQuickDiffService, QuickDiff, QuickDiffProvider } from 'vs/workbench/contrib/scm/common/quickDiff';
import { isEqualOrParent } from 'vs/base/common/resources';
import { score } from 'vs/editor/common/languageSelector';
import { Emitter } from 'vs/base/common/event';

function createProviderComparer(uri: URI): (a: QuickDiffProvider, b: QuickDiffProvider) => number {
return (a, b) => {
Expand All @@ -34,16 +35,20 @@ function createProviderComparer(uri: URI): (a: QuickDiffProvider, b: QuickDiffPr
};
}

export class QuickDiffService implements IQuickDiffService {
export class QuickDiffService extends Disposable implements IQuickDiffService {
declare readonly _serviceBrand: undefined;

private quickDiffProviders: Set<QuickDiffProvider> = new Set();
private readonly _onDidChangeQuickDiffProviders = this._register(new Emitter<void>());
readonly onDidChangeQuickDiffProviders = this._onDidChangeQuickDiffProviders.event;

addQuickDiffProvider(quickDiff: QuickDiffProvider): IDisposable {
this.quickDiffProviders.add(quickDiff);
this._onDidChangeQuickDiffProviders.fire();
return {
dispose: () => {
this.quickDiffProviders.delete(quickDiff);
this._onDidChangeQuickDiffProviders.fire();
}
};
}
Expand Down

0 comments on commit f692fbe

Please sign in to comment.