Skip to content

Commit 5163810

Browse files
author
Matt Bierner
committed
Moving syntax and semantic event null checks into dispatcher
1 parent 974d108 commit 5163810

2 files changed

Lines changed: 55 additions & 40 deletions

File tree

extensions/typescript/src/typeScriptServiceClientHost.ts

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ export default class TypeScriptServiceClientHost {
7070
this.client = new TypeScriptServiceClient(workspaceState, version => this.versionStatus.onDidChangeTypeScriptVersion(version), plugins, logDirectoryProvider);
7171
this.disposables.push(this.client);
7272

73-
this.client.onSyntaxDiagnosticsReceived(diag => this.syntaxDiagnosticsReceived(diag), null, this.disposables);
74-
this.client.onSemanticDiagnosticsReceived(diag => this.semanticDiagnosticsReceived(diag), null, this.disposables);
73+
this.client.onSyntaxDiagnosticsReceived(({ file, diagnostics }) => this.syntaxDiagnosticsReceived(file, diagnostics), null, this.disposables);
74+
this.client.onSemanticDiagnosticsReceived(({ file, diagnostics }) => this.semanticDiagnosticsReceived(file, diagnostics), null, this.disposables);
7575
this.client.onConfigDiagnosticsReceived(diag => this.configFileDiagnosticsReceived(diag), null, this.disposables);
7676
this.client.onResendModelsRequested(() => this.populateService(), null, this.disposables);
7777

@@ -170,25 +170,21 @@ export default class TypeScriptServiceClientHost {
170170
});
171171
}
172172

173-
private syntaxDiagnosticsReceived(event: Proto.DiagnosticEvent): void {
174-
const body = event.body;
175-
if (body && body.diagnostics) {
176-
this.findLanguage(body.file).then(language => {
177-
if (language) {
178-
language.syntaxDiagnosticsReceived(this.client.asUrl(body.file), this.createMarkerDatas(body.diagnostics, language.diagnosticSource));
179-
}
180-
});
173+
private async syntaxDiagnosticsReceived(file: string, diagnostics: Proto.Diagnostic[]): Promise<void> {
174+
const language = await this.findLanguage(file);
175+
if (language) {
176+
language.syntaxDiagnosticsReceived(
177+
this.client.asUrl(file),
178+
this.createMarkerDatas(diagnostics, language.diagnosticSource));
181179
}
182180
}
183181

184-
private semanticDiagnosticsReceived(event: Proto.DiagnosticEvent): void {
185-
const body = event.body;
186-
if (body && body.diagnostics) {
187-
this.findLanguage(body.file).then(language => {
188-
if (language) {
189-
language.semanticDiagnosticsReceived(this.client.asUrl(body.file), this.createMarkerDatas(body.diagnostics, language.diagnosticSource));
190-
}
191-
});
182+
private async semanticDiagnosticsReceived(file: string, diagnostics: Proto.Diagnostic[]): Promise<void> {
183+
const language = await this.findLanguage(file);
184+
if (language) {
185+
language.semanticDiagnosticsReceived(
186+
this.client.asUrl(file),
187+
this.createMarkerDatas(diagnostics, language.diagnosticSource));
192188
}
193189
}
194190

@@ -244,19 +240,19 @@ export default class TypeScriptServiceClientHost {
244240
}
245241

246242
private createMarkerDatas(diagnostics: Proto.Diagnostic[], source: string): Diagnostic[] {
247-
const result: Diagnostic[] = [];
248-
for (const diagnostic of diagnostics) {
249-
const { start, end, text } = diagnostic;
250-
const range = new Range(tsLocationToVsPosition(start), tsLocationToVsPosition(end));
251-
const converted = new Diagnostic(range, text);
252-
converted.severity = this.getDiagnosticSeverity(diagnostic);
253-
converted.source = diagnostic.source || source;
254-
if (diagnostic.code) {
255-
converted.code = diagnostic.code;
256-
}
257-
result.push(converted);
243+
return diagnostics.map(tsDiag => this.tsDiagnosticToVsDiagnostic(tsDiag, source));
244+
}
245+
246+
private tsDiagnosticToVsDiagnostic(diagnostic: Proto.Diagnostic, source: string) {
247+
const { start, end, text } = diagnostic;
248+
const range = new Range(tsLocationToVsPosition(start), tsLocationToVsPosition(end));
249+
const converted = new Diagnostic(range, text);
250+
converted.severity = this.getDiagnosticSeverity(diagnostic);
251+
converted.source = diagnostic.source || source;
252+
if (diagnostic.code) {
253+
converted.code = diagnostic.code;
258254
}
259-
return result;
255+
return converted;
260256
}
261257

262258
private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): DiagnosticSeverity {

extensions/typescript/src/typescriptServiceClient.ts

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,11 @@ class ForkedTsServerProcess {
139139
}
140140
}
141141

142+
export interface TsDiagnostics {
143+
file: string;
144+
diagnostics: Proto.Diagnostic[];
145+
}
146+
142147
export default class TypeScriptServiceClient implements ITypeScriptServiceClient {
143148
private static readonly WALK_THROUGH_SNIPPET_SCHEME_COLON = `${fileSchemes.walkThroughSnippet}:`;
144149

@@ -232,11 +237,11 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
232237
this.disposables.push(this.telemetryReporter);
233238
}
234239

235-
private _onSyntaxDiagnosticsReceived = new EventEmitter<Proto.DiagnosticEvent>();
236-
public get onSyntaxDiagnosticsReceived(): Event<Proto.DiagnosticEvent> { return this._onSyntaxDiagnosticsReceived.event; }
240+
private _onSyntaxDiagnosticsReceived = new EventEmitter<TsDiagnostics>();
241+
public get onSyntaxDiagnosticsReceived(): Event<TsDiagnostics> { return this._onSyntaxDiagnosticsReceived.event; }
237242

238-
private _onSemanticDiagnosticsReceived = new EventEmitter<Proto.DiagnosticEvent>();
239-
public get onSemanticDiagnosticsReceived(): Event<Proto.DiagnosticEvent> { return this._onSemanticDiagnosticsReceived.event; }
243+
private _onSemanticDiagnosticsReceived = new EventEmitter<TsDiagnostics>();
244+
public get onSemanticDiagnosticsReceived(): Event<TsDiagnostics> { return this._onSemanticDiagnosticsReceived.event; }
240245

241246
private _onConfigDiagnosticsReceived = new EventEmitter<Proto.ConfigFileDiagnosticEvent>();
242247
public get onConfigDiagnosticsReceived(): Event<Proto.ConfigFileDiagnosticEvent> { return this._onConfigDiagnosticsReceived.event; }
@@ -793,13 +798,27 @@ export default class TypeScriptServiceClient implements ITypeScriptServiceClient
793798
private dispatchEvent(event: Proto.Event) {
794799
switch (event.event) {
795800
case 'syntaxDiag':
796-
this._onSyntaxDiagnosticsReceived.fire(event as Proto.DiagnosticEvent);
797-
break;
798-
801+
{
802+
const diagnosticEvent: Proto.DiagnosticEvent = event;
803+
if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) {
804+
this._onSyntaxDiagnosticsReceived.fire({
805+
file: diagnosticEvent.body.file,
806+
diagnostics: diagnosticEvent.body.diagnostics
807+
});
808+
}
809+
break;
810+
}
799811
case 'semanticDiag':
800-
this._onSemanticDiagnosticsReceived.fire(event as Proto.DiagnosticEvent);
801-
break;
802-
812+
{
813+
const diagnosticEvent: Proto.DiagnosticEvent = event;
814+
if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) {
815+
this._onSemanticDiagnosticsReceived.fire({
816+
file: diagnosticEvent.body.file,
817+
diagnostics: diagnosticEvent.body.diagnostics
818+
});
819+
}
820+
break;
821+
}
803822
case 'configFileDiag':
804823
this._onConfigDiagnosticsReceived.fire(event as Proto.ConfigFileDiagnosticEvent);
805824
break;

0 commit comments

Comments
 (0)