提交 8b46fd06 编写于 作者: M Matt Bierner

Try preserving selected signature better in js/ts

Fixes #94834
上级 3978fab7
......@@ -40,14 +40,27 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
const info = response.body;
const result = new vscode.SignatureHelp();
result.activeSignature = info.selectedItemIndex;
result.activeParameter = this.getActiveParmeter(info);
result.signatures = info.items.map(signature => this.convertSignature(signature));
result.activeSignature = this.getActiveSignature(context, info, result.signatures);
result.activeParameter = this.getActiveParameter(info);
return result;
}
private getActiveParmeter(info: Proto.SignatureHelpItems): number {
private getActiveSignature(context: vscode.SignatureHelpContext, info: Proto.SignatureHelpItems, signatures: readonly vscode.SignatureInformation[]): number {
// Try matching the previous active signature's label to keep it selected
const previouslyActiveSignature = context.activeSignatureHelp?.signatures[context.activeSignatureHelp.activeSignature];
if (previouslyActiveSignature && context.isRetrigger) {
const existingIndex = signatures.findIndex(other => other.label === previouslyActiveSignature?.label);
if (existingIndex >= 0) {
return existingIndex;
}
}
return info.selectedItemIndex;
}
private getActiveParameter(info: Proto.SignatureHelpItems): number {
const activeSignature = info.items[info.selectedItemIndex];
if (activeSignature && activeSignature.isVariadic) {
return Math.min(info.argumentIndex, activeSignature.parameters.length - 1);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册