forked from qt-creator/qt-creator
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:
@@ -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());
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user