From 8903e7f387e1c96a51f13ab66d3a247bfcbf398d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 12 Apr 2023 23:05:06 +0200 Subject: [PATCH] ExecuteFilter: Reimplement matchers() Change-Id: I4a916164d1a81e0bed678ed1579a5da1cbb57f50 Reviewed-by: Eike Ziller --- .../coreplugin/locator/executefilter.cpp | 37 +++++++++++++++++++ .../coreplugin/locator/executefilter.h | 1 + 2 files changed, 38 insertions(+) diff --git a/src/plugins/coreplugin/locator/executefilter.cpp b/src/plugins/coreplugin/locator/executefilter.cpp index 723e9f60808..3d1bfb51ed4 100644 --- a/src/plugins/coreplugin/locator/executefilter.cpp +++ b/src/plugins/coreplugin/locator/executefilter.cpp @@ -39,6 +39,43 @@ ExecuteFilter::~ExecuteFilter() removeProcess(); } +LocatorMatcherTasks ExecuteFilter::matchers() +{ + using namespace Tasking; + + TreeStorage storage; + + const auto onSetup = [=] { + const QString input = storage->input(); + LocatorFilterEntries entries; + if (!input.isEmpty()) { // avoid empty entry + LocatorFilterEntry entry; + entry.displayName = input; + entry.acceptor = [this, input] { acceptCommand(input); return AcceptResult(); }; + entries.append(entry); + } + LocatorFilterEntries others; + const Qt::CaseSensitivity entryCaseSensitivity = caseSensitivity(input); + for (const QString &cmd : std::as_const(m_commandHistory)) { + if (cmd == input) // avoid repeated entry + continue; + LocatorFilterEntry entry; + entry.displayName = cmd; + entry.acceptor = [this, cmd] { acceptCommand(cmd); return AcceptResult(); }; + const int index = cmd.indexOf(input, 0, entryCaseSensitivity); + if (index >= 0) { + entry.highlightInfo = {index, int(input.length())}; + entries.append(entry); + } else { + others.append(entry); + } + } + storage->reportOutput(entries + others); + return true; + }; + return {{Sync(onSetup), storage}}; +} + void ExecuteFilter::acceptCommand(const QString &cmd) { const QString displayName = cmd.trimmed(); diff --git a/src/plugins/coreplugin/locator/executefilter.h b/src/plugins/coreplugin/locator/executefilter.h index e6628c100cc..525c7250283 100644 --- a/src/plugins/coreplugin/locator/executefilter.h +++ b/src/plugins/coreplugin/locator/executefilter.h @@ -32,6 +32,7 @@ public: QList matchesFor(QFutureInterface &future, const QString &entry) override; private: + LocatorMatcherTasks matchers() final; void acceptCommand(const QString &cmd); void done(); void readStandardOutput();