Use label text indexes to mark active paramter for js/ts

Fixes #65513
This commit is contained in:
Matt Bierner 2019-01-02 14:53:21 -08:00
parent cba84fba5e
commit 3e7bb120c7

View file

@ -60,12 +60,26 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
Previewer.plain(item.prefixDisplayParts),
Previewer.markdownDocumentation(item.documentation, item.tags.filter(x => x.name !== 'param')));
signature.parameters = item.parameters.map(p =>
new vscode.ParameterInformation(
Previewer.plain(p.displayParts),
Previewer.markdownDocumentation(p.documentation, [])));
let textIndex = signature.label.length;
const separatorLabel = Previewer.plain(item.separatorDisplayParts);
for (let i = 0; i < item.parameters.length; ++i) {
const parameter = item.parameters[i];
const label = Previewer.plain(parameter.displayParts);
signature.parameters.push(
new vscode.ParameterInformation(
[textIndex, textIndex + label.length],
Previewer.markdownDocumentation(parameter.documentation, [])));
textIndex += label.length;
signature.label += label;
if (i !== item.parameters.length - 1) {
signature.label += separatorLabel;
textIndex += separatorLabel.length;
}
}
signature.label += signature.parameters.map(parameter => parameter.label).join(Previewer.plain(item.separatorDisplayParts));
signature.label += Previewer.plain(item.suffixDisplayParts);
return signature;
}