forked from qt-creator/qt-creator
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user