From be6b1dfaecf1ba74337b615e247840445968d86f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 15 Apr 2020 19:01:31 -0700 Subject: [PATCH] Add SignatureInformation.activateParmater For #94637 Allows the active paramter to be be specified per signature instead of for all signatures. If provided, this overrides `SignatureHelp.activeParamter` --- src/vs/editor/common/modes.ts | 6 ++++++ .../parameterHints/parameterHintsWidget.ts | 19 +++++++++---------- src/vs/monaco.d.ts | 6 ++++++ src/vs/vscode.proposed.d.ts | 14 ++++++++++++++ .../api/common/extHostTypeConverters.ts | 6 ++++-- src/vs/workbench/api/common/extHostTypes.ts | 1 + 6 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index e767a6f3d1d..3caf2be20d3 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -697,6 +697,12 @@ export interface SignatureInformation { * The parameters of this signature. */ parameters: ParameterInformation[]; + /** + * Index of the active parameter. + * + * If provided, this is used in place of `SignatureHelp.activeSignature`. + */ + activeParameter?: number; } /** * Signature help represents the signature of something diff --git a/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts b/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts index 41e4a66fd1d..19e4b2cedc8 100644 --- a/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts +++ b/src/vs/editor/contrib/parameterHints/parameterHintsWidget.ts @@ -194,24 +194,23 @@ export class ParameterHintsWidget extends Disposable implements IContentWidget { } const code = dom.append(this.domNodes.signature, $('.code')); - const hasParameters = signature.parameters.length > 0; - const fontInfo = this.editor.getOption(EditorOption.fontInfo); code.style.fontSize = `${fontInfo.fontSize}px`; code.style.fontFamily = fontInfo.fontFamily; + const hasParameters = signature.parameters.length > 0; + const activeParameterIndex = signature.activeParameter ?? hints.activeParameter; + if (!hasParameters) { const label = dom.append(code, $('span')); label.textContent = signature.label; } else { - this.renderParameters(code, signature, hints.activeParameter); + this.renderParameters(code, signature, activeParameterIndex); } - this.renderDisposeables.clear(); - - const activeParameter: modes.ParameterInformation | undefined = signature.parameters[hints.activeParameter]; - if (activeParameter && activeParameter.documentation) { + const activeParameter: modes.ParameterInformation | undefined = signature.parameters[activeParameterIndex]; + if (activeParameter?.documentation) { const documentation = $('span.documentation'); if (typeof activeParameter.documentation === 'string') { documentation.textContent = activeParameter.documentation; @@ -243,7 +242,7 @@ export class ParameterHintsWidget extends Disposable implements IContentWidget { pad(hints.activeSignature + 1, hints.signatures.length.toString().length) + '/' + hints.signatures.length; if (activeParameter) { - const labelToAnnounce = this.getParameterLabel(signature, hints.activeParameter); + const labelToAnnounce = this.getParameterLabel(signature, activeParameterIndex); // Select method gets called on every user type while parameter hints are visible. // We do not want to spam the user with same announcements, so we only announce if the current parameter changed. @@ -273,8 +272,8 @@ export class ParameterHintsWidget extends Disposable implements IContentWidget { return false; } - private renderParameters(parent: HTMLElement, signature: modes.SignatureInformation, currentParameter: number): void { - const [start, end] = this.getParameterLabelOffsets(signature, currentParameter); + private renderParameters(parent: HTMLElement, signature: modes.SignatureInformation, activeParameterIndex: number): void { + const [start, end] = this.getParameterLabelOffsets(signature, activeParameterIndex); const beforeSpan = document.createElement('span'); beforeSpan.textContent = signature.label.substring(0, start); diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 99d3a926bea..5a7f5dd3623 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -5640,6 +5640,12 @@ declare namespace monaco.languages { * The parameters of this signature. */ parameters: ParameterInformation[]; + /** + * Index of the active parameter. + * + * If provided, this is used in place of `SignatureHelp.activeSignature`. + */ + activeParameter?: number; } /** diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 133bb0a0127..4d4a0427058 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1991,4 +1991,18 @@ declare module 'vscode' { //#endregion + //#region https://github.com/microsoft/vscode/issues/94637 + + export interface SignatureInformation { + + /** + * The index of the active parameter. + * + * If provided, this is used in place of `SignatureHelp.activeSignature`. + */ + activeParameter?: number; + } + + //#endregion + } diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index 6ef467bd8a2..2093ebadf37 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -939,7 +939,8 @@ export namespace SignatureInformation { return { label: info.label, documentation: info.documentation ? MarkdownString.fromStrict(info.documentation) : undefined, - parameters: Array.isArray(info.parameters) ? info.parameters.map(ParameterInformation.from) : [] + parameters: Array.isArray(info.parameters) ? info.parameters.map(ParameterInformation.from) : [], + activeParameter: info.activeParameter, }; } @@ -947,7 +948,8 @@ export namespace SignatureInformation { return { label: info.label, documentation: htmlContent.isMarkdownString(info.documentation) ? MarkdownString.to(info.documentation) : info.documentation, - parameters: Array.isArray(info.parameters) ? info.parameters.map(ParameterInformation.to) : [] + parameters: Array.isArray(info.parameters) ? info.parameters.map(ParameterInformation.to) : [], + activeParameter: info.activeParameter, }; } } diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index c1be69f6102..3af9fc37a01 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -1291,6 +1291,7 @@ export class SignatureInformation { label: string; documentation?: string | MarkdownString; parameters: ParameterInformation[]; + activeParameter?: number; constructor(label: string, documentation?: string | MarkdownString) { this.label = label; -- GitLab