aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-05-16 11:09:55 +0200
committerDavid Schulz <david.schulz@qt.io>2019-05-17 09:18:32 +0000
commite04339b1e8105a570abb34c825da73c8f0df5f8b (patch)
tree0aecd17937e2a616a5e841f6248df944f6169201 /src/plugins/languageclient
parent10611f2af959875e45e7eba608048fce4e1364ae (diff)
LanguageClient: only replace the default completion provider
Change-Id: I36977132ac8094fd31d7bc255a1666ba807810bb Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient')
-rw-r--r--src/plugins/languageclient/client.cpp30
-rw-r--r--src/plugins/languageclient/client.h2
2 files changed, 19 insertions, 13 deletions
diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp
index c2ce4cc9d4d..52f63cc07b8 100644
--- a/src/plugins/languageclient/client.cpp
+++ b/src/plugins/languageclient/client.cpp
@@ -36,12 +36,13 @@
#include <languageserverprotocol/languagefeatures.h>
#include <languageserverprotocol/messages.h>
#include <languageserverprotocol/workspace.h>
+#include <projectexplorer/project.h>
+#include <projectexplorer/session.h>
+#include <texteditor/codeassist/documentcontentcompletion.h>
#include <texteditor/semantichighlighter.h>
#include <texteditor/textdocument.h>
#include <texteditor/texteditor.h>
#include <texteditor/textmark.h>
-#include <projectexplorer/project.h>
-#include <projectexplorer/session.h>
#include <utils/mimetypes/mimedatabase.h>
#include <utils/qtcprocess.h>
#include <utils/synchronousprocess.h>
@@ -119,8 +120,9 @@ Client::~Client()
using namespace TextEditor;
// FIXME: instead of replacing the completion provider in the text document store the
// completion provider as a prioritised list in the text document
- for (TextDocument *document : m_resetAssistProvider) {
- document->setCompletionAssistProvider(nullptr);
+ for (TextDocument *document : m_resetAssistProvider.keys()) {
+ if (document->completionAssistProvider() == &m_completionProvider)
+ document->setCompletionAssistProvider(m_resetAssistProvider[document]);
document->setQuickFixAssistProvider(nullptr);
}
for (Core::IEditor * editor : Core::DocumentModel::editorsForOpenedDocuments()) {
@@ -293,14 +295,18 @@ bool Client::openDocument(Core::IDocument *document)
[this, textDocument](int position, int charsRemoved, int charsAdded) {
documentContentsChanged(textDocument, position, charsRemoved, charsAdded);
});
- textDocument->completionAssistProvider();
- m_resetAssistProvider << textDocument;
- m_completionProvider.setTriggerCharacters(
- m_serverCapabilities.completionProvider()
- .value_or(ServerCapabilities::CompletionOptions())
- .triggerCharacters()
- .value_or(QList<QString>()));
- textDocument->setCompletionAssistProvider(&m_completionProvider);
+ auto *oldCompletionProvider = qobject_cast<TextEditor::DocumentContentCompletionProvider *>(
+ textDocument->completionAssistProvider());
+ if (oldCompletionProvider || !textDocument->completionAssistProvider()) {
+ // only replace the completion assist provider if it is the default one or null
+ m_completionProvider.setTriggerCharacters(
+ m_serverCapabilities.completionProvider()
+ .value_or(ServerCapabilities::CompletionOptions())
+ .triggerCharacters()
+ .value_or(QList<QString>()));
+ textDocument->setCompletionAssistProvider(&m_completionProvider);
+ }
+ m_resetAssistProvider[textDocument] = oldCompletionProvider;
textDocument->setQuickFixAssistProvider(&m_quickFixProvider);
connect(textDocument, &QObject::destroyed, this, [this, textDocument]{
m_resetAssistProvider.remove(textDocument);
diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h
index fc8321cf2a6..bd679ead935 100644
--- a/src/plugins/languageclient/client.h
+++ b/src/plugins/languageclient/client.h
@@ -199,7 +199,7 @@ private:
DynamicCapabilities m_dynamicCapabilities;
LanguageClientCompletionAssistProvider m_completionProvider;
LanguageClientQuickFixProvider m_quickFixProvider;
- QSet<TextEditor::TextDocument *> m_resetAssistProvider;
+ QMap<TextEditor::TextDocument *, QPointer<TextEditor::CompletionAssistProvider>> m_resetAssistProvider;
QHash<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::MessageId> m_highlightRequests;
int m_restartsLeft = 5;
QScopedPointer<BaseClientInterface> m_clientInterface;