diff --git a/extensions/typescript/src/typeScriptServiceClientHost.ts b/extensions/typescript/src/typeScriptServiceClientHost.ts index 29a50158bb4cf77ce5f6393a344afc6c812695c7..fb4bded8896a1a9cfece89311e8f03b33a7495a8 100644 --- a/extensions/typescript/src/typeScriptServiceClientHost.ts +++ b/extensions/typescript/src/typeScriptServiceClientHost.ts @@ -71,6 +71,10 @@ export default class TypeScriptServiceClientHost implements ITypeScriptServiceCl this.client = new TypeScriptServiceClient(this, workspaceState, version => this.versionStatus.onDidChangeTypeScriptVersion(version), plugins, logDirectoryProvider); this.disposables.push(this.client); + this.client.onSyntaxDiagnosticsReceived(diag => this.syntaxDiagnosticsReceived(diag), null, this.disposables); + this.client.onSemanticDiagnosticsReceived(diag => this.semanticDiagnosticsReceived(diag), null, this.disposables); + this.client.onConfigDiagnosticsReceived(diag => this.configFileDiagnosticsReceived(diag), null, this.disposables); + this.versionStatus = new VersionStatus(resource => this.client.normalizePath(resource)); this.disposables.push(this.versionStatus); @@ -166,7 +170,7 @@ export default class TypeScriptServiceClientHost implements ITypeScriptServiceCl }); } - /* internal */ syntaxDiagnosticsReceived(event: Proto.DiagnosticEvent): void { + private syntaxDiagnosticsReceived(event: Proto.DiagnosticEvent): void { const body = event.body; if (body && body.diagnostics) { this.findLanguage(body.file).then(language => { @@ -177,7 +181,7 @@ export default class TypeScriptServiceClientHost implements ITypeScriptServiceCl } } - /* internal */ semanticDiagnosticsReceived(event: Proto.DiagnosticEvent): void { + private semanticDiagnosticsReceived(event: Proto.DiagnosticEvent): void { const body = event.body; if (body && body.diagnostics) { this.findLanguage(body.file).then(language => { @@ -188,7 +192,7 @@ export default class TypeScriptServiceClientHost implements ITypeScriptServiceCl } } - /* internal */ configFileDiagnosticsReceived(event: Proto.ConfigFileDiagnosticEvent): void { + private configFileDiagnosticsReceived(event: Proto.ConfigFileDiagnosticEvent): void { // See https://github.com/Microsoft/TypeScript/issues/10384 const body = event.body; if (!body || !body.diagnostics || !body.configFile) { diff --git a/extensions/typescript/src/typescriptService.ts b/extensions/typescript/src/typescriptService.ts index db51d60464c1e8d19bf17a4ffdab9493e9e07e2d..a18b071e73d5e9e48612f8ba7cfb07e944c30ead 100644 --- a/extensions/typescript/src/typescriptService.ts +++ b/extensions/typescript/src/typescriptService.ts @@ -12,9 +12,6 @@ import { TypeScriptServiceConfiguration } from './utils/configuration'; import Logger from './utils/logger'; export interface ITypeScriptServiceClientHost { - syntaxDiagnosticsReceived(event: Proto.DiagnosticEvent): void; - semanticDiagnosticsReceived(event: Proto.DiagnosticEvent): void; - configFileDiagnosticsReceived(event: Proto.ConfigFileDiagnosticEvent): void; populateService(): void; } diff --git a/extensions/typescript/src/typescriptServiceClient.ts b/extensions/typescript/src/typescriptServiceClient.ts index dc3a753210a0894f509fac4fc18ac41986b87a92..a10baa5ea61e78df966a43b0bbe8315091c9a39c 100644 --- a/extensions/typescript/src/typescriptServiceClient.ts +++ b/extensions/typescript/src/typescriptServiceClient.ts @@ -233,6 +233,15 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient this.disposables.push(this.telemetryReporter); } + private _onSyntaxDiagnosticsReceived = new EventEmitter(); + public get onSyntaxDiagnosticsReceived(): Event { return this._onSyntaxDiagnosticsReceived.event; } + + private _onSemanticDiagnosticsReceived = new EventEmitter(); + public get onSemanticDiagnosticsReceived(): Event { return this._onSemanticDiagnosticsReceived.event; } + + private _onConfigDiagnosticsReceived = new EventEmitter(); + public get onConfigDiagnosticsReceived(): Event { return this._onConfigDiagnosticsReceived.event; } + public get configuration() { return this._configuration; } @@ -245,6 +254,9 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient } disposeAll(this.disposables); + this._onSyntaxDiagnosticsReceived.dispose(); + this._onSemanticDiagnosticsReceived.dispose(); + this._onConfigDiagnosticsReceived.dispose(); } public restartTsServer(): void { @@ -782,15 +794,15 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient private dispatchEvent(event: Proto.Event) { switch (event.event) { case 'syntaxDiag': - this.host.syntaxDiagnosticsReceived(event as Proto.DiagnosticEvent); + this._onSyntaxDiagnosticsReceived.fire(event as Proto.DiagnosticEvent); break; case 'semanticDiag': - this.host.semanticDiagnosticsReceived(event as Proto.DiagnosticEvent); + this._onSemanticDiagnosticsReceived.fire(event as Proto.DiagnosticEvent); break; case 'configFileDiag': - this.host.configFileDiagnosticsReceived(event as Proto.ConfigFileDiagnosticEvent); + this._onConfigDiagnosticsReceived.fire(event as Proto.ConfigFileDiagnosticEvent); break; case 'telemetry':