diff --git a/src/libs/languageserverprotocol/workspace.h b/src/libs/languageserverprotocol/workspace.h index 3b0b247b88b..0a745a984fd 100644 --- a/src/libs/languageserverprotocol/workspace.h +++ b/src/libs/languageserverprotocol/workspace.h @@ -188,6 +188,8 @@ public: QString query() const { return typedValue(queryKey); } void setQuery(const QString &query) { insert(queryKey, query); } + void setLimit(int limit) { insert("limit", limit); } // clangd extension + bool isValid() const override { return contains(queryKey); } }; diff --git a/src/plugins/clangcodemodel/clanggloballocatorfilters.cpp b/src/plugins/clangcodemodel/clanggloballocatorfilters.cpp index 004b10a087d..e979c8928c2 100644 --- a/src/plugins/clangcodemodel/clanggloballocatorfilters.cpp +++ b/src/plugins/clangcodemodel/clanggloballocatorfilters.cpp @@ -43,6 +43,8 @@ namespace ClangCodeModel { namespace Internal { +const int MaxResultCount = 10000; + class CppLocatorFilter : public CppTools::CppLocatorFilter { public: @@ -67,6 +69,7 @@ public: setDefaultShortcutString({}); setEnabled(false); setHidden(true); + setMaxResultCount(MaxResultCount); } }; @@ -94,6 +97,7 @@ public: setDefaultShortcutString({}); setEnabled(false); setHidden(true); + setMaxResultCount(MaxResultCount); } }; @@ -121,6 +125,7 @@ public: setDefaultShortcutString({}); setEnabled(false); setHidden(true); + setMaxResultCount(MaxResultCount); } }; diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp index b3abe0fc798..ce4fd5c9b5d 100644 --- a/src/plugins/languageclient/locatorfilter.cpp +++ b/src/plugins/languageclient/locatorfilter.cpp @@ -230,6 +230,8 @@ void WorkspaceLocatorFilter::prepareSearch(const QString &entry, WorkspaceSymbolParams params; params.setQuery(entry); + if (m_maxResultCount > 0) + params.setLimit(m_maxResultCount); QMutexLocker locker(&m_mutex); for (auto client : qAsConst(clients)) { diff --git a/src/plugins/languageclient/locatorfilter.h b/src/plugins/languageclient/locatorfilter.h index 58da2ddf9c2..6ef079ec45f 100644 --- a/src/plugins/languageclient/locatorfilter.h +++ b/src/plugins/languageclient/locatorfilter.h @@ -97,6 +97,8 @@ signals: protected: explicit WorkspaceLocatorFilter(const QVector &filter); + void setMaxResultCount(qint64 limit) { m_maxResultCount = limit; } + private: void prepareSearch(const QString &entry, const QVector &clients, bool force); void handleResponse(Client *client, @@ -106,6 +108,7 @@ private: QMap m_pendingRequests; QVector m_results; QVector m_filterKinds; + qint64 m_maxResultCount = 0; }; class LANGUAGECLIENT_EXPORT WorkspaceClassLocatorFilter : public WorkspaceLocatorFilter