diff options
author | David Schulz <david.schulz@qt.io> | 2019-05-16 11:09:55 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-05-17 09:18:32 +0000 |
commit | e04339b1e8105a570abb34c825da73c8f0df5f8b (patch) | |
tree | 0aecd17937e2a616a5e841f6248df944f6169201 /src/plugins/languageclient | |
parent | 10611f2af959875e45e7eba608048fce4e1364ae (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.cpp | 30 | ||||
-rw-r--r-- | src/plugins/languageclient/client.h | 2 |
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; |