aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorAlexis Murzeau <amubtdx@gmail.com>2020-05-09 02:55:42 +0200
committerAlexis Murzeau <amubtdx@gmail.com>2020-05-11 22:32:09 +0000
commit5868e15c3008cdeb44862225aec34322d9fadc04 (patch)
tree36d2c64dca8768f288ad4ca907b27ca456b34092 /src/plugins/languageclient
parent2d5a981b9cce68ef6250d14dee35660a272d321e (diff)
LSP: Always override the assist providers if the server supports them
When the default assist provider is not DocumentContentCompletionProvider because of some plugin that also provide an assist provider, this would fail. If the user has configured a language server, assume is prefer that and always propose the server's assist providers when available. This the case for CMake files but probably C/C++ files too if the CppEditor plugin is configured to handle them. Change-Id: I641d73466c8b520beb494dae8e6b274debd2881f Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r--src/plugins/languageclient/client.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index 6cf6ac709b..e49444661a 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -374,15 +374,17 @@ void Client::activateDocument(TextEditor::TextDocument *document)
auto uri = DocumentUri::fromFilePath(document->filePath());
showDiagnostics(uri);
SemanticHighligtingSupport::applyHighlight(document, m_highlights.value(uri), capabilities());
- // only replace the assist provider if the completion provider is the default one or null
- if (!document->completionAssistProvider()
- || qobject_cast<TextEditor::DocumentContentCompletionProvider *>(
- document->completionAssistProvider())) {
- m_resetAssistProvider[document] = {document->completionAssistProvider(),
- document->functionHintAssistProvider(),
- document->quickFixAssistProvider()};
+ // only replace the assist provider if the language server support it
+ if (m_serverCapabilities.completionProvider()) {
+ m_resetAssistProvider[document].completionAssistProvider = document->completionAssistProvider();
document->setCompletionAssistProvider(m_clientProviders.completionAssistProvider);
+ }
+ if (m_serverCapabilities.signatureHelpProvider()) {
+ m_resetAssistProvider[document].functionHintProvider = document->functionHintAssistProvider();
document->setFunctionHintAssistProvider(m_clientProviders.functionHintProvider);
+ }
+ if (m_serverCapabilities.codeActionProvider()) {
+ m_resetAssistProvider[document].quickFixAssistProvider = document->quickFixAssistProvider();
document->setQuickFixAssistProvider(m_clientProviders.quickFixAssistProvider);
}
document->setFormatter(new LanguageClientFormatter(document, this));
@@ -1094,11 +1096,17 @@ void Client::removeDiagnostics(const DocumentUri &uri)
void Client::resetAssistProviders(TextEditor::TextDocument *document)
{
const AssistProviders providers = m_resetAssistProvider.take(document);
- if (document->completionAssistProvider() == m_clientProviders.completionAssistProvider)
+
+ if (document->completionAssistProvider() == m_clientProviders.completionAssistProvider &&
+ providers.completionAssistProvider)
document->setCompletionAssistProvider(providers.completionAssistProvider);
- if (document->functionHintAssistProvider() == m_clientProviders.functionHintProvider)
+
+ if (document->functionHintAssistProvider() == m_clientProviders.functionHintProvider &&
+ providers.functionHintProvider)
document->setFunctionHintAssistProvider(providers.functionHintProvider);
- if (document->quickFixAssistProvider() == m_clientProviders.quickFixAssistProvider)
+
+ if (document->quickFixAssistProvider() == m_clientProviders.quickFixAssistProvider &&
+ providers.quickFixAssistProvider)
document->setQuickFixAssistProvider(providers.quickFixAssistProvider);
}