From 174ecdc3e961d72a7e32f540fe211b4a09fc430e Mon Sep 17 00:00:00 2001 From: Andrew Casey Date: Thu, 10 Aug 2017 11:31:54 -0700 Subject: [PATCH] Return an object from completions-full Simple completions return an array but full completions return an object (containing an array). We used to return null for both case when there were no completions to return, but in f124e199718b9cda06654af2ce487f1d6a332b34 we stopped returning `undefined` for requests that require a response. We started returning `[]` instead, in both cases, which caused problems when deserializing responses to `completions-full`. Instead, return `[]` for simple completions and and empty object (containing an empty array) for full completions. --- src/server/session.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/server/session.ts b/src/server/session.ts index 0b746e4090a57..ebb1dfe201c43 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -1173,10 +1173,10 @@ namespace ts.server { const position = this.getPosition(args, scriptInfo); const completions = project.getLanguageService().getCompletionsAtPosition(file, position); - if (!completions) { - return emptyArray; - } if (simplifiedResult) { + if (!completions) { + return emptyArray; + } return mapDefined(completions.entries, entry => { if (completions.isMemberCompletion || (entry.name.toLowerCase().indexOf(prefix.toLowerCase()) === 0)) { const { name, kind, kindModifiers, sortText, replacementSpan } = entry; @@ -1186,7 +1186,12 @@ namespace ts.server { }).sort((a, b) => compareStrings(a.name, b.name)); } else { - return completions; + return completions || { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: false, + entries: [], + }; } }