From 76c7fdf6d171af73be8f060457a56e2bcdd0f67f Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Sun, 15 Feb 2015 18:24:30 -0800 Subject: [PATCH] Add test for completionEntryDetails --- src/server/client.ts | 31 ++++++++++++++++---- src/server/protocol.ts | 2 +- tests/cases/fourslash/server/completions2.ts | 18 ++++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 tests/cases/fourslash/server/completions2.ts diff --git a/src/server/client.ts b/src/server/client.ts index 24666c8f4c7..0f06fc106af 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -6,6 +6,11 @@ module ts.server { writeMessage(message: string): void; } + interface CompletionEntry extends CompletionInfo { + fileName: string; + position: number; + } + interface RenameEntry extends RenameInfo { fileName: string; position: number; @@ -19,6 +24,7 @@ module ts.server { private fileMapping: ts.Map = {}; private lineMaps: ts.Map = {}; private messages: string[] = []; + private lastCompletionEntry: CompletionEntry; private lastRenameEntry: RenameEntry; constructor(private host: SessionClientHost) { @@ -195,13 +201,30 @@ module ts.server { var request = this.processRequest(CommandNames.Completions, args); var response = this.processResponse(request); - return { + return this.lastCompletionEntry = { isMemberCompletion: false, isNewIdentifierLocation: false, - entries: response.body.map(entry => ({ kind: entry.kind, kindModifiers: entry.kindModifiers, name: entry.name })) + entries: response.body.map(entry => ({ + kind: entry.kind, + kindModifiers: entry.kindModifiers, + name: entry.name, + displayParts: entry.displayParts, + documentation: entry.documentation + })), + fileName: fileName, + position: position }; } + getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails { + debugger; + if (!this.lastCompletionEntry || this.lastCompletionEntry.fileName !== fileName || this.lastCompletionEntry.position !== position) { + this.getCompletionsAtPosition(fileName, position); + } + + return this.lastCompletionEntry.entries.filter(entry => entry.name === entryName)[0]; + } + getNavigateToItems(searchTerm: string): NavigateToItem[] { var args: ServerProtocol.NavtoRequestArgs = { searchTerm, @@ -466,10 +489,6 @@ module ts.server { throw new Error("Not Implemented Yet."); } - getCompletionEntryDetails(fileName: string, position: number, entryName: string): CompletionEntryDetails { - throw new Error("Not Implemented Yet."); - } - getProgram(): Program { throw new Error("SourceFile objects are not serializable through the server protocol."); } diff --git a/src/server/protocol.ts b/src/server/protocol.ts index 386a477cf0f..0b62e86d16e 100644 --- a/src/server/protocol.ts +++ b/src/server/protocol.ts @@ -511,7 +511,7 @@ module ts.server { protoEntry.documentation = details.documentation; } if (details && (details.displayParts) && (details.displayParts.length > 0)) { - protoEntry.displayParts = details.documentation; + protoEntry.displayParts = details.displayParts; } result.push(protoEntry); } diff --git a/tests/cases/fourslash/server/completions2.ts b/tests/cases/fourslash/server/completions2.ts new file mode 100644 index 00000000000..b34aad66ba2 --- /dev/null +++ b/tests/cases/fourslash/server/completions2.ts @@ -0,0 +1,18 @@ +/// + +////class Foo { +////} +////module Foo { +//// export var x: number; +////} +////Foo./**/ + +goTo.marker(""); +verify.completionListContains("x"); + +// Make an edit +edit.insert("a"); +edit.backspace(); + +// Checking for completion details after edit should work too +verify.completionEntryDetailIs("x", "(var) Foo.x: number");