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>
This commit is contained in:
Alexis Murzeau
2020-05-09 02:55:42 +02:00
parent 2d5a981b9c
commit 5868e15c30

View File

@@ -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);
}