LanguageClient: cancel running document symbol requests

Change-Id: I963d76e1d4ccc264cf20206b33a9de990d472a33
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
David Schulz
2022-02-07 08:07:12 +01:00
parent 0f2108e57d
commit ca7e567786
2 changed files with 9 additions and 0 deletions

View File

@@ -40,7 +40,13 @@ DocumentSymbolCache::DocumentSymbolCache(Client *client)
{ {
auto connectDocument = [this](Core::IDocument *document) { auto connectDocument = [this](Core::IDocument *document) {
connect(document, &Core::IDocument::contentsChanged, this, [document, this]() { connect(document, &Core::IDocument::contentsChanged, this, [document, this]() {
const auto uri = DocumentUri::fromFilePath(document->filePath());
m_cache.remove(DocumentUri::fromFilePath(document->filePath())); m_cache.remove(DocumentUri::fromFilePath(document->filePath()));
auto requestIdIt = m_runningRequests.find(uri);
if (requestIdIt != m_runningRequests.end()) {
m_client->cancelRequest(requestIdIt.value());
m_runningRequests.erase(requestIdIt);
}
}); });
}; };
@@ -99,6 +105,7 @@ void DocumentSymbolCache::requestSymbolsImpl()
if (self) if (self)
self->handleResponse(uri, response); self->handleResponse(uri, response);
}); });
m_runningRequests[uri] = request.id();
m_client->sendContent(request); m_client->sendContent(request);
} }
m_compressedUris.clear(); m_compressedUris.clear();
@@ -107,6 +114,7 @@ void DocumentSymbolCache::requestSymbolsImpl()
void DocumentSymbolCache::handleResponse(const DocumentUri &uri, void DocumentSymbolCache::handleResponse(const DocumentUri &uri,
const DocumentSymbolsRequest::Response &response) const DocumentSymbolsRequest::Response &response)
{ {
m_runningRequests.remove(uri);
if (Utils::optional<DocumentSymbolsRequest::Response::Error> error = response.error()) { if (Utils::optional<DocumentSymbolsRequest::Response::Error> error = response.error()) {
if (m_client) if (m_client)
m_client->log(error.value()); m_client->log(error.value());

View File

@@ -60,6 +60,7 @@ private:
const LanguageServerProtocol::DocumentSymbolsRequest::Response &response); const LanguageServerProtocol::DocumentSymbolsRequest::Response &response);
QMap<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::DocumentSymbolsResult> m_cache; QMap<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::DocumentSymbolsResult> m_cache;
QMap<LanguageServerProtocol::DocumentUri, LanguageServerProtocol::MessageId> m_runningRequests;
Client *m_client = nullptr; Client *m_client = nullptr;
QTimer m_compressionTimer; QTimer m_compressionTimer;
QSet<LanguageServerProtocol::DocumentUri> m_compressedUris; QSet<LanguageServerProtocol::DocumentUri> m_compressedUris;