From 35c50bfb1fdcc5ae7517030fbbac066f88f9caa7 Mon Sep 17 00:00:00 2001 From: zhengbli Date: Tue, 21 Jun 2016 17:07:12 -0700 Subject: [PATCH 1/2] Port the sync version diagnostics API from tsserverVS-WIP branch to 2.0 --- src/server/session.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/server/session.ts b/src/server/session.ts index aafc02a2b0b..c85158744bc 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -111,6 +111,8 @@ namespace ts.server { export const Formatonkey = "formatonkey"; export const Geterr = "geterr"; export const GeterrForProject = "geterrForProject"; + export const SemanticDiagnosticsSync = "semanticDiagnosticsFull"; + export const SyntacticDiagnosticsSync = "syntacticDiagnosticsFull"; export const NavBar = "navbar"; export const Navto = "navto"; export const Occurrences = "occurrences"; @@ -130,6 +132,7 @@ namespace ts.server { namespace Errors { export const NoProject = new Error("No Project."); + export const ProjectLanguageServiceDisabled = new Error("The project's language service is disabled."); } export interface ServerHost extends ts.System { @@ -384,6 +387,27 @@ namespace ts.server { }); } + private getDiagnosticsWorker(args: protocol.FileRequestArgs, selector: (project: Project, file: string) => Diagnostic[]) { + const file = normalizePath(args.file); + const project = this.projectService.getProjectForFile(file); + if (!project) { + throw Errors.NoProject; + } + if (project.languageServiceDiabled) { + throw Errors.ProjectLanguageServiceDisabled; + } + const diagnostics = selector(project, file); + return ts.map(diagnostics, originalDiagnostic => formatDiag(file, project, originalDiagnostic)); + } + + private getSyntacticDiagnosticsSync(args: protocol.FileRequestArgs): protocol.Diagnostic[] { + return this.getDiagnosticsWorker(args, (project, file) => project.compilerService.languageService.getSyntacticDiagnostics(file)); + } + + private getSemanticDiagnosticsSync(args: protocol.FileRequestArgs): protocol.Diagnostic[] { + return this.getDiagnosticsWorker(args, (project, file) => project.compilerService.languageService.getSemanticDiagnostics(file)); + } + private getDocumentHighlights(line: number, offset: number, fileName: string, filesToSearch: string[]): protocol.DocumentHighlightsItem[] { fileName = ts.normalizePath(fileName); const project = this.projectService.getProjectForFile(fileName); @@ -1032,6 +1056,10 @@ namespace ts.server { exit() { } + private requiredResponse(response: any) { + return { response, responseRequired: true }; + } + private handlers: Map<(request: protocol.Request) => { response?: any, responseRequired?: boolean }> = { [CommandNames.Exit]: () => { this.exit(); @@ -1100,6 +1128,12 @@ namespace ts.server { const signatureHelpArgs = request.arguments; return { response: this.getSignatureHelpItems(signatureHelpArgs.line, signatureHelpArgs.offset, signatureHelpArgs.file), responseRequired: true }; }, + [CommandNames.SemanticDiagnosticsSync]: (request: protocol.FileRequest) => { + return this.requiredResponse(this.getSemanticDiagnosticsSync(request.arguments)); + }, + [CommandNames.SyntacticDiagnosticsSync]: (request: protocol.FileRequest) => { + return this.requiredResponse(this.getSyntacticDiagnosticsSync(request.arguments)); + }, [CommandNames.Geterr]: (request: protocol.Request) => { const geterrArgs = request.arguments; return { response: this.getDiagnostics(geterrArgs.delay, geterrArgs.files), responseRequired: false }; From 9f9deceeef69f486fa69a27fc292b74c0c227a38 Mon Sep 17 00:00:00 2001 From: zhengbli Date: Thu, 23 Jun 2016 16:25:30 -0700 Subject: [PATCH 2/2] Correct the api string name --- src/server/session.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/session.ts b/src/server/session.ts index c85158744bc..195845c98fe 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -111,8 +111,8 @@ namespace ts.server { export const Formatonkey = "formatonkey"; export const Geterr = "geterr"; export const GeterrForProject = "geterrForProject"; - export const SemanticDiagnosticsSync = "semanticDiagnosticsFull"; - export const SyntacticDiagnosticsSync = "syntacticDiagnosticsFull"; + export const SemanticDiagnosticsSync = "semanticDiagnosticsSync"; + export const SyntacticDiagnosticsSync = "syntacticDiagnosticsSync"; export const NavBar = "navbar"; export const Navto = "navto"; export const Occurrences = "occurrences";