aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient/documentsymbolcache.cpp
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2020-01-29 11:17:47 +0100
committerDavid Schulz <david.schulz@qt.io>2020-01-31 11:45:02 +0000
commitb9f4719571728a31404aed5da0f94ebf2ebcdf84 (patch)
treeee31ac4d34b713f5af29e91973be8e14de73f3b6 /src/plugins/languageclient/documentsymbolcache.cpp
parent820fa993a6fdb349a57bb5ab4656b107c941f15d (diff)
LanguageClient: compress requests from the symbol cache
Change-Id: I58c6863fae6e275073c377558eaba18f7f32b4f2 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient/documentsymbolcache.cpp')
-rw-r--r--src/plugins/languageclient/documentsymbolcache.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/src/plugins/languageclient/documentsymbolcache.cpp b/src/plugins/languageclient/documentsymbolcache.cpp
index 119cfad992f..21494a66936 100644
--- a/src/plugins/languageclient/documentsymbolcache.cpp
+++ b/src/plugins/languageclient/documentsymbolcache.cpp
@@ -50,24 +50,34 @@ DocumentSymbolCache::DocumentSymbolCache(Client *client)
&Core::EditorManager::documentOpened,
this,
connectDocument);
+ m_compressionTimer.setSingleShot(true);
+ connect(&m_compressionTimer, &QTimer::timeout, this, &DocumentSymbolCache::requestSymbolsImpl);
}
void DocumentSymbolCache::requestSymbols(const DocumentUri &uri)
{
- auto entry = m_cache.find(uri);
- if (entry != m_cache.end()) {
- emit gotSymbols(uri, entry.value());
- return;
- }
+ m_compressedUris.insert(uri);
+ m_compressionTimer.start(200);
+}
+
+void DocumentSymbolCache::requestSymbolsImpl()
+{
+ for (const DocumentUri &uri : qAsConst(m_compressedUris)) {
+ auto entry = m_cache.find(uri);
+ if (entry != m_cache.end()) {
+ emit gotSymbols(uri, entry.value());
+ return;
+ }
- const DocumentSymbolParams params((TextDocumentIdentifier(uri)));
- DocumentSymbolsRequest request(params);
- request.setResponseCallback([uri, self = QPointer<DocumentSymbolCache>(this)](
- const DocumentSymbolsRequest::Response &response) {
- if (self)
- self->handleResponse(uri, response);
- });
- m_client->sendContent(request);
+ const DocumentSymbolParams params((TextDocumentIdentifier(uri)));
+ DocumentSymbolsRequest request(params);
+ request.setResponseCallback([uri, self = QPointer<DocumentSymbolCache>(this)](
+ const DocumentSymbolsRequest::Response &response) {
+ if (self)
+ self->handleResponse(uri, response);
+ });
+ m_client->sendContent(request);
+ }
}
void DocumentSymbolCache::handleResponse(const DocumentUri &uri,