LSP: Add support for activeParameter of SignatureInformation

Task-number: QTCREATORBUG-26346
Change-Id: Ieab18f08e4f1b9fa6cacfae0a18310af4bc35165
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2021-09-30 07:23:23 +02:00
parent 416ea51494
commit 7df00776d1
5 changed files with 17 additions and 4 deletions

View File

@@ -336,6 +336,12 @@ public:
Utils::optional<QList<MarkupKind>> documentationFormat() const;
void setDocumentationFormat(const QList<MarkupKind> &documentationFormat);
void clearDocumentationFormat() { remove(documentationFormatKey); }
Utils::optional<bool> activeParameterSupport() const
{ return optionalValue<bool>(activeParameterSupportKey); }
void setActiveParameterSupport(bool activeParameterSupport)
{ insert(activeParameterSupportKey, activeParameterSupport); }
void clearActiveParameterSupport() { remove(activeParameterSupportKey); }
};
// The client supports the following `SignatureInformation` specific properties.

View File

@@ -29,6 +29,7 @@ namespace LanguageServerProtocol {
constexpr char actionsKey[] = "actions";
constexpr char activeParameterKey[] = "activeParameter";
constexpr char activeParameterSupportKey[] = "activeParameterSupport";
constexpr char activeSignatureKey[] = "activeSignature";
constexpr char addedKey[] = "added";
constexpr char additionalTextEditsKey[] = "additionalTextEdits";

View File

@@ -145,6 +145,10 @@ public:
void setParameters(const QList<ParameterInformation> &parameters)
{ insertArray(parametersKey, parameters); }
void clearParameters() { remove(parametersKey); }
Utils::optional<int> activeParameter() const { return optionalValue<int>(activeParameterKey); }
void setActiveParameter(int activeParameter) { insert(activeParameterKey, activeParameter); }
void clearActiveParameter() { remove(activeParameterKey); }
};
/**

View File

@@ -248,6 +248,7 @@ static ClientCapabilities generateClientCapabilities()
signatureHelp.setDynamicRegistration(true);
TextDocumentClientCapabilities::SignatureHelpCapabilities::SignatureInformationCapabilities info;
info.setDocumentationFormat({MarkupKind::markdown, MarkupKind::plaintext});
info.setActiveParameterSupport(true);
signatureHelp.setSignatureInformation(info);
documentCapabilities.setSignatureHelp(signatureHelp);

View File

@@ -61,11 +61,12 @@ QString FunctionHintProposalModel::text(int index) const
if (index < 0 || m_sigis.signatures().size() <= index)
return {};
const SignatureInformation signature = m_sigis.signatures().at(index);
int parametersIndex = signature.activeParameter().value_or(-1);
if (parametersIndex < 0) {
if (index == m_sigis.activeSignature().value_or(-1))
parametersIndex = m_sigis.activeParameter().value_or(-1);
}
QString label = signature.label();
if (index != m_sigis.activeSignature().value_or(-1))
return label;
const int parametersIndex = m_sigis.activeParameter().value_or(-1);
if (parametersIndex < 0)
return label;