From 1b11ba2772e27a7ed7c89fcf1e7cc6e79ca10769 Mon Sep 17 00:00:00 2001 From: Sami Shalayel Date: Thu, 14 Nov 2024 16:14:27 +0100 Subject: [PATCH] qmlls: enabled/disable embedded codemodel Make the (de)activateDocument() method in Client virtual, and override it in QmllsClient to actually be able to enable or disable the embedded codemodel. Also add a setSourcesWithCapabilities method to QmlJSEditorDocument that calls the same-named method in QmlJSEditorDocumentPrivate. Fixes: QTCREATORBUG-32025 Task-number: QTCREATORBUG-31897 Change-Id: I5802c1c3f2f983236182bbefa58ff425692b2532 Reviewed-by: David Schulz --- src/plugins/languageclient/client.h | 4 ++-- src/plugins/qmljseditor/qmljseditordocument.cpp | 7 +++++++ src/plugins/qmljseditor/qmljseditordocument.h | 5 ++++- src/plugins/qmljseditor/qmljseditorsettings.cpp | 1 - src/plugins/qmljseditor/qmllsclient.cpp | 17 +++++++++++++++++ src/plugins/qmljseditor/qmllsclient.h | 5 +++++ 6 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 079d3eb9677..d57d3fdbe73 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -114,9 +114,9 @@ public: virtual void openDocument(TextEditor::TextDocument *document); void closeDocument(TextEditor::TextDocument *document, const std::optional &overwriteFilePath = {}); - void activateDocument(TextEditor::TextDocument *document); + virtual void activateDocument(TextEditor::TextDocument *document); void activateEditor(Core::IEditor *editor); - void deactivateDocument(TextEditor::TextDocument *document); + virtual void deactivateDocument(TextEditor::TextDocument *document); bool documentOpen(const TextEditor::TextDocument *document) const; TextEditor::TextDocument *documentForFilePath(const Utils::FilePath &file) const; void setShadowDocument(const Utils::FilePath &filePath, const QString &contents); diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp index b9460ad3c21..266867ac6ca 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.cpp +++ b/src/plugins/qmljseditor/qmljseditordocument.cpp @@ -831,4 +831,11 @@ void QmlJSEditorDocument::triggerPendingUpdates() } } +void QmlJSEditorDocument::setSourcesWithCapabilities( + const LanguageServerProtocol::ServerCapabilities &cap) +{ + d->setSourcesWithCapabilities(cap); +} + + } // QmlJSEditor diff --git a/src/plugins/qmljseditor/qmljseditordocument.h b/src/plugins/qmljseditor/qmljseditordocument.h index 3428952370a..0334cb6336b 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.h +++ b/src/plugins/qmljseditor/qmljseditordocument.h @@ -5,8 +5,9 @@ #include "qmljseditor_global.h" -#include +#include #include +#include #include @@ -37,6 +38,8 @@ public: void setIsDesignModePreferred(bool value); bool isDesignModePreferred() const; + void setSourcesWithCapabilities(const LanguageServerProtocol::ServerCapabilities &cap); + signals: void updateCodeWarnings(QmlJS::Document::Ptr doc); void semanticInfoUpdated(const QmlJSTools::SemanticInfo &semanticInfo); diff --git a/src/plugins/qmljseditor/qmljseditorsettings.cpp b/src/plugins/qmljseditor/qmljseditorsettings.cpp index 7d34f296df5..179086aacf5 100644 --- a/src/plugins/qmljseditor/qmljseditorsettings.cpp +++ b/src/plugins/qmljseditor/qmljseditorsettings.cpp @@ -5,7 +5,6 @@ #include "qmljseditorconstants.h" #include "qmljseditortr.h" #include "qmllsclient.h" -#include "qmllsclientsettings.h" #include #include diff --git a/src/plugins/qmljseditor/qmllsclient.cpp b/src/plugins/qmljseditor/qmllsclient.cpp index 5976ce7880f..9749ccd7d6d 100644 --- a/src/plugins/qmljseditor/qmllsclient.cpp +++ b/src/plugins/qmljseditor/qmllsclient.cpp @@ -4,6 +4,7 @@ #include "qmllsclient.h" #include "qmljseditorconstants.h" +#include "qmljseditordocument.h" #include "qmljsquickfix.h" #include "qmllsclientsettings.h" @@ -114,6 +115,22 @@ public: } }; +void QmllsClient::activateDocument(TextEditor::TextDocument *document) +{ + Client::activateDocument(document); + + if (auto qmljseditor = qobject_cast(document)) + qmljseditor->setSourcesWithCapabilities(capabilities()); +} + +void QmllsClient::deactivateDocument(TextEditor::TextDocument *document) +{ + Client::deactivateDocument(document); + + if (auto qmljseditor = qobject_cast(document)) + qmljseditor->setSourcesWithCapabilities(LanguageServerProtocol::ServerCapabilities{}); +} + QmllsClient::QmllsClient(StdIOClientInterface *interface) : Client(interface) { diff --git a/src/plugins/qmljseditor/qmllsclient.h b/src/plugins/qmljseditor/qmllsclient.h index 8ea9dfbeec7..ffe2114e511 100644 --- a/src/plugins/qmljseditor/qmllsclient.h +++ b/src/plugins/qmljseditor/qmllsclient.h @@ -10,6 +10,8 @@ #include #include +#include "qmllsclientsettings.h" + namespace QmlJSEditor { class QMLJSEDITOR_EXPORT QmllsClient : public LanguageClient::Client @@ -55,6 +57,9 @@ public: void startImpl() override; void updateQmllsSemanticHighlightingCapability(); + + void activateDocument(TextEditor::TextDocument *document) override; + void deactivateDocument(TextEditor::TextDocument *document) override; private: static QMap semanticTokenTypesMap(); };