From d0a06748a86fa1d393bc866cdc47e5c3a0555be5 Mon Sep 17 00:00:00 2001 From: Semih Yavuz Date: Wed, 14 Aug 2024 11:48:42 +0200 Subject: [PATCH] qmlls client: opt out semantic highlighting for QtC 14.x, take 2 When we restart language server, everything is reset including dynamically registered/unregistered methods but clients aren't destroyed. Therefore, we need to register dynamically registered entities in the Client::start() method rather than the constructor. Customize the start behavior of qmlls client by applying template pattern. Amends df2e55d92a78e2e571f714fb2fc25478da5e0525 Task-number: QTCREATORBUG-31148 Change-Id: Ib974500beb46cb79d972756efd0f6c7bbd7a87af Reviewed-by: Sami Shalayel Reviewed-by: David Schulz --- src/plugins/languageclient/client.cpp | 5 +++++ src/plugins/languageclient/client.h | 1 + src/plugins/qmljseditor/qmllsclient.cpp | 14 ++++++++++---- src/plugins/qmljseditor/qmllsclient.h | 1 + 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 4c2fcf101f6..98cf59898de 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1683,6 +1683,11 @@ void Client::setLogTarget(LogTarget target) } void Client::start() +{ + startImpl(); +} + +void Client::startImpl() { d->m_shutdownTimer.stop(); LanguageClientManager::addClient(this); diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 13e908b2d50..ec4c7c26854 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -224,6 +224,7 @@ protected: void handleMessage(const LanguageServerProtocol::JsonRpcMessage &message); virtual void handleDiagnostics(const LanguageServerProtocol::PublishDiagnosticsParams ¶ms); virtual DiagnosticManager *createDiagnosticManager(); + virtual void startImpl(); private: friend class ClientPrivate; diff --git a/src/plugins/qmljseditor/qmllsclient.cpp b/src/plugins/qmljseditor/qmllsclient.cpp index 9fe50a5af7e..087e58dc255 100644 --- a/src/plugins/qmljseditor/qmllsclient.cpp +++ b/src/plugins/qmljseditor/qmllsclient.cpp @@ -66,10 +66,6 @@ QmllsClient *QmllsClient::clientForQmlls(const FilePath &qmlls) QmllsClient::QmllsClient(StdIOClientInterface *interface) : Client(interface) { - LanguageServerProtocol::Unregistration unregister; - unregister.setMethod("textDocument/semanticTokens"); - unregister.setId({}); - dynamicCapabilities().unregisterCapability({unregister}); } QmllsClient::~QmllsClient() @@ -77,4 +73,14 @@ QmllsClient::~QmllsClient() qmllsClients().remove(qmllsClients().key(this)); } +void QmllsClient::startImpl() +{ + LanguageServerProtocol::Unregistration unregister; + unregister.setMethod("textDocument/semanticTokens"); + unregister.setId({}); + dynamicCapabilities().unregisterCapability({unregister}); + + Client::startImpl(); +} + } // namespace QmlJSEditor diff --git a/src/plugins/qmljseditor/qmllsclient.h b/src/plugins/qmljseditor/qmllsclient.h index 30c0170bf70..2010ea0dda0 100644 --- a/src/plugins/qmljseditor/qmllsclient.h +++ b/src/plugins/qmljseditor/qmllsclient.h @@ -19,6 +19,7 @@ public: explicit QmllsClient(LanguageClient::StdIOClientInterface *interface); ~QmllsClient(); + void startImpl() override; static QmllsClient *clientForQmlls(const Utils::FilePath &qmlls); };