LanguageClient: set assist provider trigger characters just once

Instead of setting the completion characters every time after a document
was opened only set it when the server capabilities are set.

Change-Id: Ia37dc426a98aca1a4884752ac5da2659bfda53ec
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2019-09-10 09:37:35 +02:00
parent 25601fbbf0
commit 704de8d676

View File

@@ -320,23 +320,6 @@ bool Client::openDocument(Core::IDocument *document)
documentContentsChanged(textDocument, position, charsRemoved, charsAdded);
});
if (auto completionProvider = qobject_cast<LanguageClientCompletionAssistProvider *>(
m_clientProviders.completionAssistProvider)) {
completionProvider->setTriggerCharacters(
m_serverCapabilities.completionProvider()
.value_or(ServerCapabilities::CompletionOptions())
.triggerCharacters()
.value_or(QList<QString>()));
}
if (auto functionHintAssistProvider = qobject_cast<FunctionHintAssistProvider *>(
m_clientProviders.completionAssistProvider)) {
functionHintAssistProvider->setTriggerCharacters(
m_serverCapabilities.signatureHelpProvider()
.value_or(ServerCapabilities::SignatureHelpOptions())
.triggerCharacters()
.value_or(QList<QString>()));
}
auto *oldCompletionProvider = qobject_cast<DocumentContentCompletionProvider *>(
textDocument->completionAssistProvider());
// only replace the completion assist provider if it is the default one or null
@@ -1224,6 +1207,24 @@ void Client::intializeCallback(const InitializeRequest::Response &initResponse)
m_serverCapabilities = result.capabilities().value_or(ServerCapabilities());
}
if (auto completionProvider = qobject_cast<LanguageClientCompletionAssistProvider *>(
m_clientProviders.completionAssistProvider)) {
completionProvider->setTriggerCharacters(
m_serverCapabilities.completionProvider()
.value_or(ServerCapabilities::CompletionOptions())
.triggerCharacters()
.value_or(QList<QString>()));
}
if (auto functionHintAssistProvider = qobject_cast<FunctionHintAssistProvider *>(
m_clientProviders.completionAssistProvider)) {
functionHintAssistProvider->setTriggerCharacters(
m_serverCapabilities.signatureHelpProvider()
.value_or(ServerCapabilities::SignatureHelpOptions())
.triggerCharacters()
.value_or(QList<QString>()));
}
qCDebug(LOGLSPCLIENT) << "language server " << m_displayName << " initialized";
m_state = Initialized;
sendContent(InitializeNotification());