diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index c627e51b829..2930146cdc5 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -81,7 +81,7 @@ static Q_LOGGING_CATEGORY(LOGLSPCLIENT, "qtc.languageclient.client", QtWarningMs Client::Client(BaseClientInterface *clientInterface) : m_id(Utils::Id::fromString(QUuid::createUuid().toString())) , m_clientInterface(clientInterface) - , m_diagnosticManager(m_id) + , m_diagnosticManager(this) , m_documentSymbolCache(this) , m_hoverHandler(this) , m_symbolSupport(this) diff --git a/src/plugins/languageclient/diagnosticmanager.cpp b/src/plugins/languageclient/diagnosticmanager.cpp index 67068c30ea0..fa1d22e3120 100644 --- a/src/plugins/languageclient/diagnosticmanager.cpp +++ b/src/plugins/languageclient/diagnosticmanager.cpp @@ -25,6 +25,8 @@ #include "diagnosticmanager.h" +#include "client.h" + #include #include #include @@ -69,8 +71,8 @@ private: const Diagnostic m_diagnostic; }; -DiagnosticManager::DiagnosticManager(const Id &clientId) - : m_clientId(clientId) +DiagnosticManager::DiagnosticManager(Client *client) + : m_client(client) {} DiagnosticManager::~DiagnosticManager() @@ -95,7 +97,7 @@ void DiagnosticManager::hideDiagnostics(TextDocument *doc) m_hideHandler(); for (BaseTextEditor *editor : BaseTextEditor::textEditorsForDocument(doc)) editor->editorWidget()->setExtraSelections(TextEditorWidget::CodeWarningsSelection, {}); - qDeleteAll(Utils::filtered(doc->marks(), Utils::equal(&TextMark::category, m_clientId))); + qDeleteAll(Utils::filtered(doc->marks(), Utils::equal(&TextMark::category, m_client->id()))); } void DiagnosticManager::removeDiagnostics(const LanguageServerProtocol::DocumentUri &uri) @@ -141,7 +143,7 @@ void DiagnosticManager::showDiagnostics(const DocumentUri &uri, int version) QObject::connect(action, &QAction::triggered, [text = diagnostic.message()]() { QApplication::clipboard()->setText(text); }); - auto mark = new TextMark(filePath, diagnostic, m_clientId); + auto mark = new TextMark(filePath, diagnostic, m_client->id()); mark->setActions({action}); doc->addMark(mark); @@ -164,7 +166,7 @@ void DiagnosticManager::clearDiagnostics() QList DiagnosticManager::diagnosticsAt(const DocumentUri &uri, const QTextCursor &cursor) const { - const int documentRevision = cursor.document()->revision(); + const int documentRevision = m_client->documentVersion(uri.toFilePath()); auto it = m_diagnostics.find(uri); if (it == m_diagnostics.end()) return {}; @@ -184,7 +186,7 @@ bool DiagnosticManager::hasDiagnostic(const LanguageServerProtocol::DocumentUri const auto it = m_diagnostics.find(uri); if (it == m_diagnostics.end()) return {}; - const int revision = doc->document()->revision(); + const int revision = m_client->documentVersion(uri.toFilePath()); if (revision != it->version.value_or(revision)) return false; return it->diagnostics.contains(diag); diff --git a/src/plugins/languageclient/diagnosticmanager.h b/src/plugins/languageclient/diagnosticmanager.h index 7d4303b2404..d876a8150de 100644 --- a/src/plugins/languageclient/diagnosticmanager.h +++ b/src/plugins/languageclient/diagnosticmanager.h @@ -40,6 +40,8 @@ class TextMark; namespace LanguageClient { +class Client; + using TextMarkCreator = std::function; using HideDiagnosticsHandler = std::function; @@ -48,7 +50,7 @@ class DiagnosticManager { Q_DECLARE_TR_FUNCTIONS(LanguageClient::DiagnosticManager) public: - explicit DiagnosticManager(const Utils::Id &clientId); + explicit DiagnosticManager(Client *client); ~DiagnosticManager(); void setDiagnostics(const LanguageServerProtocol::DocumentUri &uri, @@ -77,9 +79,9 @@ private: QList diagnostics; }; QMap m_diagnostics; - Utils::Id m_clientId; TextMarkCreator m_textMarkCreator; HideDiagnosticsHandler m_hideHandler; + Client *m_client; }; } // namespace LanguageClient