Skip to content

Commit 59a5aa1

Browse files
committed
add trace logging to extHostDiagnostics, microsoft#96837
1 parent 55e86cd commit 59a5aa1

3 files changed

Lines changed: 31 additions & 12 deletions

File tree

src/vs/workbench/api/common/extHost.api.impl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
324324
// namespace: languages
325325
const languages: typeof vscode.languages = {
326326
createDiagnosticCollection(name?: string): vscode.DiagnosticCollection {
327-
return extHostDiagnostics.createDiagnosticCollection(name);
327+
return extHostDiagnostics.createDiagnosticCollection(extension.identifier, name);
328328
},
329329
get onDidChangeDiagnostics() {
330330
return extHostDiagnostics.onDidChangeDiagnostics;

src/vs/workbench/api/common/extHostDiagnostics.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { mergeSort } from 'vs/base/common/arrays';
1414
import { Event, Emitter } from 'vs/base/common/event';
1515
import { ILogService } from 'vs/platform/log/common/log';
1616
import { ResourceMap } from 'vs/base/common/map';
17+
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
1718

1819
export class DiagnosticCollection implements vscode.DiagnosticCollection {
1920

@@ -25,7 +26,7 @@ export class DiagnosticCollection implements vscode.DiagnosticCollection {
2526
private readonly _owner: string,
2627
private readonly _maxDiagnosticsPerFile: number,
2728
private readonly _proxy: MainThreadDiagnosticsShape | undefined,
28-
private readonly _onDidChangeDiagnostics: Emitter<(vscode.Uri | string)[]>
29+
private readonly _onDidChangeDiagnostics: Emitter<vscode.Uri[]>
2930
) { }
3031

3132
dispose(): void {
@@ -215,7 +216,7 @@ export class ExtHostDiagnostics implements ExtHostDiagnosticsShape {
215216

216217
private readonly _proxy: MainThreadDiagnosticsShape;
217218
private readonly _collections = new Map<string, DiagnosticCollection>();
218-
private readonly _onDidChangeDiagnostics = new Emitter<(vscode.Uri | string)[]>();
219+
private readonly _onDidChangeDiagnostics = new Emitter<vscode.Uri[]>();
219220

220221
static _debouncer(last: (vscode.Uri | string)[] | undefined, current: (vscode.Uri | string)[]): (vscode.Uri | string)[] {
221222
if (!last) {
@@ -251,8 +252,25 @@ export class ExtHostDiagnostics implements ExtHostDiagnosticsShape {
251252
this._proxy = mainContext.getProxy(MainContext.MainThreadDiagnostics);
252253
}
253254

254-
createDiagnosticCollection(name?: string): vscode.DiagnosticCollection {
255-
let { _collections, _proxy, _onDidChangeDiagnostics } = this;
255+
createDiagnosticCollection(extensionId: ExtensionIdentifier, name?: string): vscode.DiagnosticCollection {
256+
257+
const { _collections, _proxy, _onDidChangeDiagnostics, _logService } = this;
258+
259+
const loggingProxy = new class implements MainThreadDiagnosticsShape {
260+
$changeMany(owner: string, entries: [UriComponents, IMarkerData[] | undefined][]): void {
261+
_proxy.$changeMany(owner, entries);
262+
_logService.trace('[DiagnosticCollection] change many (extension, owner, uris)', extensionId.value, owner, entries.length === 0 ? 'CLEARING' : entries);
263+
}
264+
$clear(owner: string): void {
265+
_proxy.$clear(owner);
266+
_logService.trace('[DiagnosticCollection] remove all (extension, owner)', extensionId.value, owner);
267+
}
268+
dispose(): void {
269+
_proxy.dispose();
270+
}
271+
};
272+
273+
256274
let owner: string;
257275
if (!name) {
258276
name = '_generated_diagnostic_collection_name_#' + ExtHostDiagnostics._idPool++;
@@ -268,7 +286,7 @@ export class ExtHostDiagnostics implements ExtHostDiagnosticsShape {
268286

269287
const result = new class extends DiagnosticCollection {
270288
constructor() {
271-
super(name!, owner, ExtHostDiagnostics._maxDiagnosticsPerFile, _proxy, _onDidChangeDiagnostics);
289+
super(name!, owner, ExtHostDiagnostics._maxDiagnosticsPerFile, loggingProxy, _onDidChangeDiagnostics);
272290
_collections.set(owner, this);
273291
}
274292
dispose() {

src/vs/workbench/test/browser/api/extHostDiagnostics.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { mock } from 'vs/workbench/test/browser/api/mock';
1313
import { Emitter, Event } from 'vs/base/common/event';
1414
import { NullLogService } from 'vs/platform/log/common/log';
1515
import type * as vscode from 'vscode';
16+
import { nullExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
1617

1718
suite('ExtHostDiagnostics', () => {
1819

@@ -286,7 +287,7 @@ suite('ExtHostDiagnostics', () => {
286287
});
287288

288289
test('diagnostic eventing', async function () {
289-
let emitter = new Emitter<Array<string | URI>>();
290+
let emitter = new Emitter<Array<URI>>();
290291
let collection = new DiagnosticCollection('ddd', 'test', 100, new DiagnosticsShape(), emitter);
291292

292293
let diag1 = new Diagnostic(new Range(1, 1, 2, 3), 'diag1');
@@ -316,15 +317,15 @@ suite('ExtHostDiagnostics', () => {
316317

317318
p = Event.toPromise(emitter.event).then(e => {
318319
assert.equal(e.length, 2);
319-
assert.ok(typeof e[0] === 'string');
320-
assert.ok(typeof e[1] === 'string');
320+
assert.ok(URI.isUri(e[0]));
321+
assert.ok(URI.isUri(e[1]));
321322
});
322323
collection.clear();
323324
await p;
324325
});
325326

326327
test('vscode.languages.onDidChangeDiagnostics Does Not Provide Document URI #49582', async function () {
327-
let emitter = new Emitter<Array<string | URI>>();
328+
let emitter = new Emitter<Array<URI>>();
328329
let collection = new DiagnosticCollection('ddd', 'test', 100, new DiagnosticsShape(), emitter);
329330

330331
let diag1 = new Diagnostic(new Range(1, 1, 2, 3), 'diag1');
@@ -390,8 +391,8 @@ suite('ExtHostDiagnostics', () => {
390391
}
391392
}, new NullLogService());
392393

393-
let collection1 = diags.createDiagnosticCollection('foo');
394-
let collection2 = diags.createDiagnosticCollection('foo'); // warns, uses a different owner
394+
let collection1 = diags.createDiagnosticCollection(nullExtensionDescription.identifier, 'foo');
395+
let collection2 = diags.createDiagnosticCollection(nullExtensionDescription.identifier, 'foo'); // warns, uses a different owner
395396

396397
collection1.clear();
397398
collection2.clear();

0 commit comments

Comments
 (0)