From b02b49ebd0e21295d2cb0aa48dddb661ec53e83a Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 21 Feb 2018 18:54:47 -0800 Subject: [PATCH] Use async --- .../src/features/signatureHelpProvider.ts | 75 +++++++++---------- 1 file changed, 35 insertions(+), 40 deletions(-) diff --git a/extensions/typescript/src/features/signatureHelpProvider.ts b/extensions/typescript/src/features/signatureHelpProvider.ts index 0768e03f4a6..92a975c8187 100644 --- a/extensions/typescript/src/features/signatureHelpProvider.ts +++ b/extensions/typescript/src/features/signatureHelpProvider.ts @@ -13,56 +13,51 @@ import { vsPositionToTsFileLocation } from '../utils/convert'; export default class TypeScriptSignatureHelpProvider implements SignatureHelpProvider { public constructor( - private client: ITypeScriptServiceClient) { } + private readonly client: ITypeScriptServiceClient + ) { } - public provideSignatureHelp(document: TextDocument, position: Position, token: CancellationToken): Promise { + public async provideSignatureHelp(document: TextDocument, position: Position, token: CancellationToken): Promise { const filepath = this.client.normalizePath(document.uri); if (!filepath) { - return Promise.resolve(null); + return null; } const args: Proto.SignatureHelpRequestArgs = vsPositionToTsFileLocation(filepath, position); - return this.client.execute('signatureHelp', args, token).then((response) => { - const info = response.body; - if (!info) { - return null; + + const response = await this.client.execute('signatureHelp', args, token); + const info = response.body; + if (!info) { + return null; + } + + const result = new SignatureHelp(); + result.activeSignature = info.selectedItemIndex; + result.activeParameter = info.argumentIndex; + + info.items.forEach((item, i) => { + // keep active parameter in bounds + if (i === info.selectedItemIndex && item.isVariadic) { + result.activeParameter = Math.min(info.argumentIndex, item.parameters.length - 1); } - const result = new SignatureHelp(); - result.activeSignature = info.selectedItemIndex; - result.activeParameter = info.argumentIndex; + const signature = new SignatureInformation(''); + signature.label += Previewer.plain(item.prefixDisplayParts); - info.items.forEach((item, i) => { - if (!info) { - return; + item.parameters.forEach((p, i, a) => { + const parameter = new ParameterInformation( + Previewer.plain(p.displayParts), + Previewer.plain(p.documentation)); + + signature.label += parameter.label; + signature.parameters.push(parameter); + if (i < a.length - 1) { + signature.label += Previewer.plain(item.separatorDisplayParts); } - - // keep active parameter in bounds - if (i === info.selectedItemIndex && item.isVariadic) { - result.activeParameter = Math.min(info.argumentIndex, item.parameters.length - 1); - } - - const signature = new SignatureInformation(''); - signature.label += Previewer.plain(item.prefixDisplayParts); - - item.parameters.forEach((p, i, a) => { - const parameter = new ParameterInformation( - Previewer.plain(p.displayParts), - Previewer.plain(p.documentation)); - - signature.label += parameter.label; - signature.parameters.push(parameter); - if (i < a.length - 1) { - signature.label += Previewer.plain(item.separatorDisplayParts); - } - }); - signature.label += Previewer.plain(item.suffixDisplayParts); - signature.documentation = Previewer.markdownDocumentation(item.documentation, item.tags); - result.signatures.push(signature); }); - - return result; - }, () => { - return null; + signature.label += Previewer.plain(item.suffixDisplayParts); + signature.documentation = Previewer.markdownDocumentation(item.documentation, item.tags); + result.signatures.push(signature); }); + + return result; } } \ No newline at end of file