From 863c65b901158ed47638447d5ff124a7f54557ec Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Sun, 19 Jun 2016 15:48:10 -0700 Subject: [PATCH] brace completion --- src/server/protocol.d.ts | 8 ++++++++ src/server/session.ts | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/server/protocol.d.ts b/src/server/protocol.d.ts index 6e3cba3044f..5aa0ac856b9 100644 --- a/src/server/protocol.d.ts +++ b/src/server/protocol.d.ts @@ -289,6 +289,14 @@ declare namespace ts.server.protocol { body?: FileSpan[]; } + export interface BraceCompletionRequest extends FileLocationRequest { + arguments: BraceCompletionRequestArgs; + } + + export interface BraceCompletionRequestArgs extends FileLocationRequestArgs { + openingBrace: string; + } + /** * Get occurrences request; value of command field is * "occurrences". Return response giving spans that are relevant diff --git a/src/server/session.ts b/src/server/session.ts index f245b0da1cb..e20811a0c1b 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -102,6 +102,7 @@ namespace ts.server { export namespace CommandNames { export const Brace = "brace"; export const BraceFull = "brace-full"; + export const BraceCompletion = "braceCompletion"; export const Change = "change"; export const Close = "close"; export const Completions = "completions"; @@ -751,6 +752,12 @@ namespace ts.server { return { position, indentation }; } + private isValidBraceCompletion(args: protocol.BraceCompletionRequestArgs) { + const { file, project } = this.getFileAndProject(args.file); + const position = this.getPosition(args, project.getScriptInfo(file)); + return project.languageService.isValidBraceCompletionAtPostion(file, position, args.openingBrace.charCodeAt(0)); + } + private getQuickInfoWorker(args: protocol.FileLocationRequestArgs, simplifiedResult: boolean): protocol.QuickInfoResponseBody | QuickInfo { const file = ts.normalizePath(args.file); const project = this.projectService.getProjectForFile(file); @@ -1302,6 +1309,9 @@ namespace ts.server { [CommandNames.Indentation]: (request: protocol.IndentationRequest) => { return this.requiredResponse(this.getIndentation(request.arguments)); }, + [CommandNames.BraceCompletion]: (request: protocol.BraceCompletionRequest) => { + return this.requiredResponse(this.isValidBraceCompletion(request.arguments)); + }, [CommandNames.DocCommentTemplate]: (request: protocol.FileLocationRequest) => { return this.requiredResponse(this.getDocCommentTemplate(request.arguments)); },