Use async

This commit is contained in:
Matt Bierner
2018-02-21 18:54:47 -08:00
parent 030b95a792
commit b02b49ebd0

View File

@@ -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<SignatureHelp | undefined | null> {
public async provideSignatureHelp(document: TextDocument, position: Position, token: CancellationToken): Promise<SignatureHelp | undefined | null> {
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;
}
}