From 0d4db5ffc407ffab5058dc5ea7de1dc511a5d150 Mon Sep 17 00:00:00 2001 From: Aiday Marlen Kyzy Date: Thu, 17 Aug 2023 14:35:27 +0200 Subject: [PATCH] sending the diagnostics on handle exit --- .../src/languageFeatures/diagnostics.ts | 50 +++++++++++++------ .../src/typescriptServiceClient.ts | 6 +-- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts b/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts index 515ee7889fb..8a4a0c79e95 100644 --- a/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts +++ b/extensions/typescript-language-features/src/languageFeatures/diagnostics.ts @@ -149,12 +149,40 @@ class DiagnosticSettings { } } +class DiagnosticsTelemetryManager { + + private _diagnosticCodes: number[] = []; + + constructor(private readonly _telemetryReporter: TelemetryReporter) { } + + public addDiagnosticCodes(codes: number[]) { + this._diagnosticCodes.push(...codes); + this._diagnosticCodes.sort(); + } + + public sendDiagnosticsCodesTelemetry(): void { + /* __GDPR__ + "typescript.diagnostics" : { + "owner": "@aiday-mar", + "diagnosticCodes" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }, + "${include}": [ + "${TypeScriptCommonProperties}" + ] + } + */ + this._telemetryReporter.logTelemetry('typescript.diagnostics', { + diagnoticCodes: this._diagnosticCodes.join(', ') + }); + this._diagnosticCodes = []; + } +} + export class DiagnosticsManager extends Disposable { private readonly _diagnostics: ResourceMap; private readonly _settings = new DiagnosticSettings(); private readonly _currentDiagnostics: vscode.DiagnosticCollection; private readonly _pendingUpdates: ResourceMap; - + private readonly _diagnosticsTelemetryManager: DiagnosticsTelemetryManager; private readonly _updateDelay = 50; constructor( @@ -167,6 +195,7 @@ export class DiagnosticsManager extends Disposable { this._pendingUpdates = new ResourceMap(undefined, { onCaseInsensitiveFileSystem }); this._currentDiagnostics = this._register(vscode.languages.createDiagnosticCollection(owner)); + this._diagnosticsTelemetryManager = new DiagnosticsTelemetryManager(telemetryReporter); this._register(vscode.workspace.onDidOpenTextDocument((document) => { const diagnostics = this.getDiagnostics(document.uri); const diagnoticCodes = diagnostics.reduce(function (result: number[], d: vscode.Diagnostic) { @@ -177,22 +206,15 @@ export class DiagnosticsManager extends Disposable { result.push(Number(code.value)); } return result; - }, []).sort(); - /* __GDPR__ - "typescript.diagnostics" : { - "owner": "@aiday-mar", - "diagnosticCodes" : { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" }, - "${include}": [ - "${TypeScriptCommonProperties}" - ] - } - */ - telemetryReporter.logTelemetry('typescript.diagnostics', { - diagnoticCodes: diagnoticCodes.join(', ') - }); + }, []); + this._diagnosticsTelemetryManager.addDiagnosticCodes(diagnoticCodes); })); } + public sendDiagnosticsCodesTelemetry(): void { + this._diagnosticsTelemetryManager.sendDiagnosticsCodesTelemetry(); + } + public override dispose() { super.dispose(); diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts index e9e303e5b4f..d04f41e4142 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts @@ -456,7 +456,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType } */ this.logTelemetry('tsserver.exitWithCode', { code: code ?? undefined, signal: signal ?? undefined }); - + this.diagnosticsManager.sendDiagnosticsCodesTelemetry(); if (this.token !== mytoken) { // this is coming from an old process @@ -468,9 +468,6 @@ export default class TypeScriptServiceClient extends Disposable implements IType } this.serviceExited(!this.isRestarting); this.isRestarting = false; - - // TODO: on handle exit, we need to send the typescript errors that we have accumulated - console.log('on handle exit'); }); handle.onEvent(event => this.dispatchEvent(event)); @@ -582,7 +579,6 @@ export default class TypeScriptServiceClient extends Disposable implements IType }; } - // TODO: service exited will close the client service, is this the one that we need to monitor? private serviceExited(restart: boolean): void { this.loadingIndicator.reset();