diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index afd00b4fe8a..8b8cb023e2e 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -123,7 +123,13 @@ export namespace Event { * @deprecated DO NOT use, this leaks memory */ export function debounce(event: Event, merge: (last: T | undefined, event: T) => T, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event; + /** + * @deprecated DO NOT use, this leaks memory + */ export function debounce(event: Event, merge: (last: O | undefined, event: I) => O, delay?: number, leading?: boolean, leakWarningThreshold?: number): Event; + /** + * @deprecated DO NOT use, this leaks memory + */ export function debounce(event: Event, merge: (last: O | undefined, event: I) => O, delay: number = 100, leading = false, leakWarningThreshold?: number): Event { let subscription: IDisposable; diff --git a/src/vs/workbench/api/common/extHostDiagnostics.ts b/src/vs/workbench/api/common/extHostDiagnostics.ts index 39f05e7db20..e8be6415fca 100644 --- a/src/vs/workbench/api/common/extHostDiagnostics.ts +++ b/src/vs/workbench/api/common/extHostDiagnostics.ts @@ -10,7 +10,7 @@ import type * as vscode from 'vscode'; import { MainContext, MainThreadDiagnosticsShape, ExtHostDiagnosticsShape, IMainContext } from './extHost.protocol'; import { DiagnosticSeverity } from './extHostTypes'; import * as converter from './extHostTypeConverters'; -import { Event, Emitter } from 'vs/base/common/event'; +import { Event, Emitter, DebounceEmitter } from 'vs/base/common/event'; import { ILogService } from 'vs/platform/log/common/log'; import { ResourceMap } from 'vs/base/common/map'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; @@ -215,15 +215,7 @@ export class ExtHostDiagnostics implements ExtHostDiagnosticsShape { private readonly _proxy: MainThreadDiagnosticsShape; private readonly _collections = new Map(); - private readonly _onDidChangeDiagnostics = new Emitter(); - - static _debouncer(last: vscode.Uri[] | undefined, current: vscode.Uri[]): vscode.Uri[] { - if (!last) { - return current; - } else { - return last.concat(current); - } - } + private readonly _onDidChangeDiagnostics = new DebounceEmitter({ merge: all => all.flat(), delay: 50 }); static _mapper(last: vscode.Uri[]): { uris: readonly vscode.Uri[] } { const map = new ResourceMap(); @@ -233,7 +225,7 @@ export class ExtHostDiagnostics implements ExtHostDiagnosticsShape { return { uris: Object.freeze(Array.from(map.values())) }; } - readonly onDidChangeDiagnostics: Event = Event.map(Event.debounce(this._onDidChangeDiagnostics.event, ExtHostDiagnostics._debouncer, 50), ExtHostDiagnostics._mapper); + readonly onDidChangeDiagnostics: Event = Event.map(this._onDidChangeDiagnostics.event, ExtHostDiagnostics._mapper); constructor(mainContext: IMainContext, @ILogService private readonly _logService: ILogService) { this._proxy = mainContext.getProxy(MainContext.MainThreadDiagnostics);