forked from qt-creator/qt-creator
LanguageClient: only replace the default completion provider
Change-Id: I36977132ac8094fd31d7bc255a1666ba807810bb Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -36,12 +36,13 @@
|
|||||||
#include <languageserverprotocol/languagefeatures.h>
|
#include <languageserverprotocol/languagefeatures.h>
|
||||||
#include <languageserverprotocol/messages.h>
|
#include <languageserverprotocol/messages.h>
|
||||||
#include <languageserverprotocol/workspace.h>
|
#include <languageserverprotocol/workspace.h>
|
||||||
|
#include <projectexplorer/project.h>
|
||||||
|
#include <projectexplorer/session.h>
|
||||||
|
#include <texteditor/codeassist/documentcontentcompletion.h>
|
||||||
#include <texteditor/semantichighlighter.h>
|
#include <texteditor/semantichighlighter.h>
|
||||||
#include <texteditor/textdocument.h>
|
#include <texteditor/textdocument.h>
|
||||||
#include <texteditor/texteditor.h>
|
#include <texteditor/texteditor.h>
|
||||||
#include <texteditor/textmark.h>
|
#include <texteditor/textmark.h>
|
||||||
#include <projectexplorer/project.h>
|
|
||||||
#include <projectexplorer/session.h>
|
|
||||||
#include <utils/mimetypes/mimedatabase.h>
|
#include <utils/mimetypes/mimedatabase.h>
|
||||||
#include <utils/qtcprocess.h>
|
#include <utils/qtcprocess.h>
|
||||||
#include <utils/synchronousprocess.h>
|
#include <utils/synchronousprocess.h>
|
||||||
@@ -119,8 +120,9 @@ Client::~Client()
|
|||||||
using namespace TextEditor;
|
using namespace TextEditor;
|
||||||
// FIXME: instead of replacing the completion provider in the text document store the
|
// FIXME: instead of replacing the completion provider in the text document store the
|
||||||
// completion provider as a prioritised list in the text document
|
// completion provider as a prioritised list in the text document
|
||||||
for (TextDocument *document : m_resetAssistProvider) {
|
for (TextDocument *document : m_resetAssistProvider.keys()) {
|
||||||
document->setCompletionAssistProvider(nullptr);
|
if (document->completionAssistProvider() == &m_completionProvider)
|
||||||
|
document->setCompletionAssistProvider(m_resetAssistProvider[document]);
|
||||||
document->setQuickFixAssistProvider(nullptr);
|
document->setQuickFixAssistProvider(nullptr);
|
||||||
}
|
}
|
||||||
for (Core::IEditor * editor : Core::DocumentModel::editorsForOpenedDocuments()) {
|
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) {
|
[this, textDocument](int position, int charsRemoved, int charsAdded) {
|
||||||
documentContentsChanged(textDocument, position, charsRemoved, charsAdded);
|
documentContentsChanged(textDocument, position, charsRemoved, charsAdded);
|
||||||
});
|
});
|
||||||
textDocument->completionAssistProvider();
|
auto *oldCompletionProvider = qobject_cast<TextEditor::DocumentContentCompletionProvider *>(
|
||||||
m_resetAssistProvider << textDocument;
|
textDocument->completionAssistProvider());
|
||||||
m_completionProvider.setTriggerCharacters(
|
if (oldCompletionProvider || !textDocument->completionAssistProvider()) {
|
||||||
m_serverCapabilities.completionProvider()
|
// only replace the completion assist provider if it is the default one or null
|
||||||
.value_or(ServerCapabilities::CompletionOptions())
|
m_completionProvider.setTriggerCharacters(
|
||||||
.triggerCharacters()
|
m_serverCapabilities.completionProvider()
|
||||||
.value_or(QList<QString>()));
|
.value_or(ServerCapabilities::CompletionOptions())
|
||||||
textDocument->setCompletionAssistProvider(&m_completionProvider);
|
.triggerCharacters()
|
||||||
|
.value_or(QList<QString>()));
|
||||||
|
textDocument->setCompletionAssistProvider(&m_completionProvider);
|
||||||
|
}
|
||||||
|
m_resetAssistProvider[textDocument] = oldCompletionProvider;
|
||||||
textDocument->setQuickFixAssistProvider(&m_quickFixProvider);
|
textDocument->setQuickFixAssistProvider(&m_quickFixProvider);
|
||||||
connect(textDocument, &QObject::destroyed, this, [this, textDocument]{
|
connect(textDocument, &QObject::destroyed, this, [this, textDocument]{
|
||||||
m_resetAssistProvider.remove(textDocument);
|
m_resetAssistProvider.remove(textDocument);
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ private:
|
|||||||
DynamicCapabilities m_dynamicCapabilities;
|
DynamicCapabilities m_dynamicCapabilities;
|
||||||
LanguageClientCompletionAssistProvider m_completionProvider;
|
LanguageClientCompletionAssistProvider m_completionProvider;
|
||||||
LanguageClientQuickFixProvider m_quickFixProvider;
|
LanguageClientQuickFixProvider m_quickFixProvider;
|
||||||
QSet<TextEditor::TextDocument *> m_resetAssistProvider;
|
QMap<TextEditor::TextDocument *, QPointer<TextEditor::CompletionAssistProvider>> m_resetAssistProvider;
|
||||||
QHash<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::MessageId> m_highlightRequests;
|
QHash<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::MessageId> m_highlightRequests;
|
||||||
int m_restartsLeft = 5;
|
int m_restartsLeft = 5;
|
||||||
QScopedPointer<BaseClientInterface> m_clientInterface;
|
QScopedPointer<BaseClientInterface> m_clientInterface;
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ class AssistInterface;
|
|||||||
|
|
||||||
class TEXTEDITOR_EXPORT DocumentContentCompletionProvider : public CompletionAssistProvider
|
class TEXTEDITOR_EXPORT DocumentContentCompletionProvider : public CompletionAssistProvider
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DocumentContentCompletionProvider(
|
DocumentContentCompletionProvider(
|
||||||
const QString &snippetGroup = QString(Constants::TEXT_SNIPPET_GROUP_ID));
|
const QString &snippetGroup = QString(Constants::TEXT_SNIPPET_GROUP_ID));
|
||||||
|
|||||||
Reference in New Issue
Block a user