diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp index 5d2a583a27f..d5cac61d669 100644 --- a/src/plugins/languageclient/locatorfilter.cpp +++ b/src/plugins/languageclient/locatorfilter.cpp @@ -111,6 +111,15 @@ Core::LocatorFilterEntry generateLocatorEntry(const SymbolInformation &info, return entry; } +QList generateLocatorEntries(const SymbolInformation &info, + Core::ILocatorFilter *filter, + const QRegularExpression ®exp) +{ + if (!regexp.match(info.name()).hasMatch()) + return { generateLocatorEntry(info, filter) }; + return {}; +} + Core::LocatorFilterEntry generateLocatorEntry(const DocumentSymbol &info, Core::ILocatorFilter *filter) { @@ -125,6 +134,19 @@ Core::LocatorFilterEntry generateLocatorEntry(const DocumentSymbol &info, return entry; } +QList generateLocatorEntries(const DocumentSymbol &info, + Core::ILocatorFilter *filter, + const QRegularExpression ®exp) +{ + QList entries; + if (regexp.match(info.name()).hasMatch()) + entries << generateLocatorEntry(info, filter); + const QList children = info.children().value_or(QList()); + for (const DocumentSymbol &child : children) + entries << generateLocatorEntries(child, filter, regexp); + return entries; +} + template QList DocumentLocatorFilter::generateEntries(const QList &list, const QString &filter) @@ -138,11 +160,8 @@ QList DocumentLocatorFilter::generateEntries(const QLi if (!regexp.isValid()) return entries; - for (const T &item : list) { - QRegularExpressionMatch match = regexp.match(item.name()); - if (match.hasMatch()) - entries << generateLocatorEntry(item, this); - } + for (const T &item : list) + entries << generateLocatorEntries(item, this, regexp); return entries; }