parent
3978fab7f1
commit
8b46fd0645
|
@ -40,14 +40,27 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
|
||||||
|
|
||||||
const info = response.body;
|
const info = response.body;
|
||||||
const result = new vscode.SignatureHelp();
|
const result = new vscode.SignatureHelp();
|
||||||
result.activeSignature = info.selectedItemIndex;
|
|
||||||
result.activeParameter = this.getActiveParmeter(info);
|
|
||||||
result.signatures = info.items.map(signature => this.convertSignature(signature));
|
result.signatures = info.items.map(signature => this.convertSignature(signature));
|
||||||
|
result.activeSignature = this.getActiveSignature(context, info, result.signatures);
|
||||||
|
result.activeParameter = this.getActiveParameter(info);
|
||||||
|
|
||||||
return result;
|
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];
|
const activeSignature = info.items[info.selectedItemIndex];
|
||||||
if (activeSignature && activeSignature.isVariadic) {
|
if (activeSignature && activeSignature.isVariadic) {
|
||||||
return Math.min(info.argumentIndex, activeSignature.parameters.length - 1);
|
return Math.min(info.argumentIndex, activeSignature.parameters.length - 1);
|
||||||
|
|
Loading…
Reference in a new issue