From 4361103193970ae542bdaba4c0a22b951b1a821f Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 9 Jul 2021 11:20:27 +0200 Subject: [PATCH] LanguageClient: highlight current argument in function hint Change-Id: I23be02c4bef30a527ba9f419a059c1d3bfed1c2b Reviewed-by: Christian Kandeler --- .../languageclientfunctionhint.cpp | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/plugins/languageclient/languageclientfunctionhint.cpp b/src/plugins/languageclient/languageclientfunctionhint.cpp index 32c0ff0a637..c650c3cdbf0 100644 --- a/src/plugins/languageclient/languageclientfunctionhint.cpp +++ b/src/plugins/languageclient/languageclientfunctionhint.cpp @@ -57,9 +57,28 @@ private: QString FunctionHintProposalModel::text(int index) const { + using Parameters = QList; if (index < 0 || m_sigis.signatures().size() <= index) return {}; - return m_sigis.signatures().at(index).label(); + const SignatureInformation signature = m_sigis.signatures().at(index); + 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; + + const QList parameters = Utils::transform(signature.parameters().value_or(Parameters()), + &ParameterInformation::label); + if (parameters.size() <= parametersIndex) + return label; + + const QString ¶meterText = parameters.at(parametersIndex); + const int start = label.indexOf(parameterText); + const int end = start + parameterText.length(); + return label.mid(0, start).toHtmlEscaped() + "" + parameterText.toHtmlEscaped() + "" + + label.mid(end).toHtmlEscaped(); } class FunctionHintProcessor : public IAssistProcessor