From 99969120d3a2abfa4aaad529ce715abdd987afb4 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Fri, 27 Oct 2017 12:59:05 -0700 Subject: [PATCH] Use async for completion item provider --- .../src/features/completionItemProvider.ts | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/extensions/typescript/src/features/completionItemProvider.ts b/extensions/typescript/src/features/completionItemProvider.ts index b7cbf17f729..48c51dce0fa 100644 --- a/extensions/typescript/src/features/completionItemProvider.ts +++ b/extensions/typescript/src/features/completionItemProvider.ts @@ -162,7 +162,7 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP this.config.nameSuggestions = workspace.getConfiguration('javascript').get(Configuration.nameSuggestions, true); } - public provideCompletionItems( + public async provideCompletionItems( document: TextDocument, position: Position, token: CancellationToken, @@ -181,30 +181,30 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP const file = this.client.normalizePath(document.uri); if (!file) { - return Promise.resolve([]); + return []; } if (context.triggerCharacter === '"' || context.triggerCharacter === '\'') { if (!this.config.quickSuggestionsForPaths) { - return Promise.resolve([]); + return []; } // make sure we are in something that looks like the start of an import const line = document.lineAt(position.line).text.slice(0, position.character); if (!line.match(/\b(from|import)\s*["']$/) && !line.match(/\b(import|require)\(['"]$/)) { - return Promise.resolve([]); + return []; } } if (context.triggerCharacter === '/') { if (!this.config.quickSuggestionsForPaths) { - return Promise.resolve([]); + return []; } // make sure we are in something that looks like an import path const line = document.lineAt(position.line).text.slice(0, position.character); if (!line.match(/\bfrom\s*["'][^'"]*$/) && !line.match(/\b(import|require)\(['"][^'"]*$/)) { - return Promise.resolve([]); + return []; } } @@ -212,12 +212,13 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP // make sure we are in something that looks like the start of a jsdoc comment const line = document.lineAt(position.line).text.slice(0, position.character); if (!line.match(/^\s*\*[ ]?@/) && !line.match(/\/\*\*+[ ]?@/)) { - return Promise.resolve([]); + return []; } } - const args: CompletionsRequestArgs = vsPositionToTsFileLocation(file, position); - return this.client.execute('completions', args, token).then((msg) => { + try { + const args: CompletionsRequestArgs = vsPositionToTsFileLocation(file, position); + const msg = await this.client.execute('completions', args, token); // This info has to come from the tsserver. See https://github.com/Microsoft/TypeScript/issues/2831 // let isMemberCompletion = false; // let requestColumn = position.character; @@ -260,9 +261,9 @@ export default class TypeScriptCompletionItemProvider implements CompletionItemP } return completionItems; - }, () => { + } catch { return []; - }); + } } public resolveCompletionItem(item: CompletionItem, token: CancellationToken): ProviderResult { -- GitLab