diff --git a/extensions/typescript-language-features/src/features/completions.ts b/extensions/typescript-language-features/src/features/completions.ts index 2c4ece54764..cb7e8c89cd5 100644 --- a/extensions/typescript-language-features/src/features/completions.ts +++ b/extensions/typescript-language-features/src/features/completions.ts @@ -306,12 +306,23 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider triggerCharacter: context.triggerCharacter as Proto.CompletionsTriggerCharacter }; - let msg: Proto.CompletionEntry[] | undefined = undefined; + let msg: ReadonlyArray | undefined = undefined; try { - const response = await this.client.execute('completions', args, token); - msg = response.body; - if (!msg) { - return []; + if (this.client.apiVersion.gte(API.v300)) { + const response = await this.client.execute('completionInfo', args, token); + if (!response.body) { + return []; + } + if (response.body.isNewIdentifierLocation) { + return []; + } + msg = response.body.entries; + } else { + const response = await this.client.execute('completions', args, token); + if (!response.body) { + return []; + } + msg = response.body; } } catch { return []; diff --git a/extensions/typescript-language-features/src/typescriptService.ts b/extensions/typescript-language-features/src/typescriptService.ts index 729bda6af6c..709ec47bf5d 100644 --- a/extensions/typescript-language-features/src/typescriptService.ts +++ b/extensions/typescript-language-features/src/typescriptService.ts @@ -51,6 +51,7 @@ export interface ITypeScriptServiceClient { execute(command: 'change', args: Proto.ChangeRequestArgs, expectedResult: boolean, token?: CancellationToken): Promise; execute(command: 'quickinfo', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise; execute(command: 'completions', args: Proto.CompletionsRequestArgs, token?: CancellationToken): Promise; + execute(command: 'completionInfo', args: Proto.CompletionsRequestArgs, token?: CancellationToken): Promise; execute(command: 'completionEntryDetails', args: Proto.CompletionDetailsRequestArgs, token?: CancellationToken): Promise; execute(command: 'signatureHelp', args: Proto.SignatureHelpRequestArgs, token?: CancellationToken): Promise; execute(command: 'definition', args: Proto.FileLocationRequestArgs, token?: CancellationToken): Promise;