diff options
author | Alexis Murzeau <amubtdx@gmail.com> | 2020-05-09 02:55:42 +0200 |
---|---|---|
committer | Alexis Murzeau <amubtdx@gmail.com> | 2020-05-11 22:32:09 +0000 |
commit | 5868e15c3008cdeb44862225aec34322d9fadc04 (patch) | |
tree | 36d2c64dca8768f288ad4ca907b27ca456b34092 /src/plugins/languageclient | |
parent | 2d5a981b9cce68ef6250d14dee35660a272d321e (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.cpp | 28 |
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); } |