aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/filesearch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/utils/filesearch.cpp')
-rw-r--r--src/libs/utils/filesearch.cpp101
1 files changed, 48 insertions, 53 deletions
diff --git a/src/libs/utils/filesearch.cpp b/src/libs/utils/filesearch.cpp
index ccbcfbfb9f..a72ddc6ab0 100644
--- a/src/libs/utils/filesearch.cpp
+++ b/src/libs/utils/filesearch.cpp
@@ -7,6 +7,7 @@
#include "filepath.h"
#include "mapreduce.h"
#include "qtcassert.h"
+#include "searchresultitem.h"
#include "stringutils.h"
#include "utilstr.h"
@@ -68,7 +69,7 @@ public:
FileSearch(const QString &searchTerm,
QTextDocument::FindFlags flags,
const QMap<FilePath, QString> &fileToContentsMap);
- void operator()(QFutureInterface<FileSearchResultList> &futureInterface,
+ void operator()(QFutureInterface<SearchResultItems> &futureInterface,
const FileIterator::Item &item) const;
private:
@@ -90,7 +91,7 @@ public:
QTextDocument::FindFlags flags,
const QMap<FilePath, QString> &fileToContentsMap);
FileSearchRegExp(const FileSearchRegExp &other);
- void operator()(QFutureInterface<FileSearchResultList> &futureInterface,
+ void operator()(QFutureInterface<SearchResultItems> &futureInterface,
const FileIterator::Item &item) const;
private:
@@ -116,7 +117,7 @@ FileSearch::FileSearch(const QString &searchTerm,
termDataUpper = searchTermUpper.constData();
}
-void FileSearch::operator()(QFutureInterface<FileSearchResultList> &futureInterface,
+void FileSearch::operator()(QFutureInterface<SearchResultItems> &futureInterface,
const FileIterator::Item &item) const
{
if (futureInterface.isCanceled())
@@ -124,7 +125,7 @@ void FileSearch::operator()(QFutureInterface<FileSearchResultList> &futureInterf
qCDebug(searchLog) << "Searching in" << item.filePath;
futureInterface.setProgressRange(0, 1);
futureInterface.setProgressValue(0);
- FileSearchResultList results;
+ SearchResultItems results;
QString tempString;
if (!getFileContent(item.filePath, item.encoding, &tempString, fileToContentsMap)) {
qCDebug(searchLog) << "- failed to get content for" << item.filePath;
@@ -189,13 +190,13 @@ void FileSearch::operator()(QFutureInterface<FileSearchResultList> &futureInterf
}
}
if (equal) {
- const QString resultItemText = clippedText(chunk, MAX_LINE_SIZE);
- results << FileSearchResult(item.filePath,
- lineNr,
- resultItemText,
- regionPtr - chunkPtr,
- termMaxIndex + 1,
- QStringList());
+ SearchResultItem result;
+ result.setFilePath(item.filePath);
+ result.setMainRange(lineNr, regionPtr - chunkPtr, termMaxIndex + 1);
+ result.setDisplayText(clippedText(chunk, MAX_LINE_SIZE));
+ result.setUserData(QStringList());
+ result.setUseTextEditorFont(true);
+ results << result;
regionPtr += termMaxIndex; // another +1 done by for-loop
}
}
@@ -237,7 +238,7 @@ QRegularExpressionMatch FileSearchRegExp::doGuardedMatch(const QString &line, in
return expression.match(line, offset);
}
-void FileSearchRegExp::operator()(QFutureInterface<FileSearchResultList> &futureInterface,
+void FileSearchRegExp::operator()(QFutureInterface<SearchResultItems> &futureInterface,
const FileIterator::Item &item) const
{
if (!expression.isValid()) {
@@ -249,7 +250,7 @@ void FileSearchRegExp::operator()(QFutureInterface<FileSearchResultList> &future
qCDebug(searchLog) << "Searching in" << item.filePath;
futureInterface.setProgressRange(0, 1);
futureInterface.setProgressValue(0);
- FileSearchResultList results;
+ SearchResultItems results;
QString tempString;
if (!getFileContent(item.filePath, item.encoding, &tempString, fileToContentsMap)) {
qCDebug(searchLog) << "- failed to get content for" << item.filePath;
@@ -269,12 +270,13 @@ void FileSearchRegExp::operator()(QFutureInterface<FileSearchResultList> &future
int pos = 0;
while ((match = doGuardedMatch(line, pos)).hasMatch()) {
pos = match.capturedStart();
- results << FileSearchResult(item.filePath,
- lineNr,
- resultItemText,
- pos,
- match.capturedLength(),
- match.capturedTexts());
+ SearchResultItem result;
+ result.setFilePath(item.filePath);
+ result.setMainRange(lineNr, pos, match.capturedLength());
+ result.setDisplayText(resultItemText);
+ result.setUserData(match.capturedTexts());
+ result.setUseTextEditorFont(true);
+ results << result;
if (match.capturedLength() == 0)
break;
pos += match.capturedLength();
@@ -298,12 +300,12 @@ struct SearchState
SearchState(const QString &term, FileIterator *iterator) : searchTerm(term), files(iterator) {}
QString searchTerm;
FileIterator *files = nullptr;
- FileSearchResultList cachedResults;
+ SearchResultItems cachedResults;
int numFilesSearched = 0;
int numMatches = 0;
};
-SearchState initFileSearch(QFutureInterface<FileSearchResultList> &futureInterface,
+SearchState initFileSearch(QFutureInterface<SearchResultItems> &futureInterface,
const QString &searchTerm, FileIterator *files)
{
futureInterface.setProgressRange(0, files->maxProgress());
@@ -311,9 +313,9 @@ SearchState initFileSearch(QFutureInterface<FileSearchResultList> &futureInterfa
return SearchState(searchTerm, files);
}
-void collectSearchResults(QFutureInterface<FileSearchResultList> &futureInterface,
+void collectSearchResults(QFutureInterface<SearchResultItems> &futureInterface,
SearchState &state,
- const FileSearchResultList &results)
+ const SearchResultItems &results)
{
state.numMatches += results.size();
state.cachedResults << results;
@@ -332,7 +334,7 @@ void collectSearchResults(QFutureInterface<FileSearchResultList> &futureInterfac
}
}
-void cleanUpFileSearch(QFutureInterface<FileSearchResultList> &futureInterface,
+void cleanUpFileSearch(QFutureInterface<SearchResultItems> &futureInterface,
SearchState &state)
{
if (!state.cachedResults.isEmpty()) {
@@ -355,13 +357,13 @@ void cleanUpFileSearch(QFutureInterface<FileSearchResultList> &futureInterface,
} // namespace
-QFuture<FileSearchResultList> Utils::findInFiles(const QString &searchTerm,
- FileIterator *files,
- QTextDocument::FindFlags flags,
- const QMap<FilePath, QString> &fileToContentsMap)
+QFuture<SearchResultItems> Utils::findInFiles(const QString &searchTerm,
+ FileIterator *files,
+ QTextDocument::FindFlags flags,
+ const QMap<FilePath, QString> &fileToContentsMap)
{
return mapReduce(files->begin(), files->end(),
- [searchTerm, files](QFutureInterface<FileSearchResultList> &futureInterface) {
+ [searchTerm, files](QFutureInterface<SearchResultItems> &futureInterface) {
return initFileSearch(futureInterface, searchTerm, files);
},
FileSearch(searchTerm, flags, fileToContentsMap),
@@ -369,14 +371,14 @@ QFuture<FileSearchResultList> Utils::findInFiles(const QString &searchTerm,
&cleanUpFileSearch);
}
-QFuture<FileSearchResultList> Utils::findInFilesRegExp(
+QFuture<SearchResultItems> Utils::findInFilesRegExp(
const QString &searchTerm,
FileIterator *files,
QTextDocument::FindFlags flags,
const QMap<FilePath, QString> &fileToContentsMap)
{
return mapReduce(files->begin(), files->end(),
- [searchTerm, files](QFutureInterface<FileSearchResultList> &futureInterface) {
+ [searchTerm, files](QFutureInterface<SearchResultItems> &futureInterface) {
return initFileSearch(futureInterface, searchTerm, files);
},
FileSearchRegExp(searchTerm, flags, fileToContentsMap),
@@ -496,16 +498,6 @@ static bool isFileIncluded(const QList<QRegularExpression> &filterRegs,
return isIncluded && (exclusionRegs.isEmpty() || !matches(exclusionRegs, filePath));
}
-std::function<bool(const FilePath &)> filterFileFunction(const QStringList &filters,
- const QStringList &exclusionFilters)
-{
- const QList<QRegularExpression> filterRegs = filtersToRegExps(filters);
- const QList<QRegularExpression> exclusionRegs = filtersToRegExps(exclusionFilters);
- return [filterRegs, exclusionRegs](const FilePath &filePath) {
- return isFileIncluded(filterRegs, exclusionRegs, filePath);
- };
-}
-
std::function<FilePaths(const FilePaths &)> filterFilesFunction(const QStringList &filters,
const QStringList &exclusionFilters)
{
@@ -538,10 +530,12 @@ QString msgExclusionPatternLabel()
return Tr::tr("Excl&usion pattern:");
}
-QString msgFilePatternToolTip()
+QString msgFilePatternToolTip(InclusionType inclusionType)
{
- return Tr::tr("List of comma separated wildcard filters. "
- "Files with file name or full file path matching any filter are included.");
+ return Tr::tr("List of comma separated wildcard filters. ")
+ + (inclusionType == InclusionType::Included
+ ? Tr::tr("Files with file name or full file path matching any filter are included.")
+ : Tr::tr("Files with file name or full file path matching any filter are excluded."));
}
QString matchCaseReplacement(const QString &originalText, const QString &replaceText)
@@ -598,19 +592,20 @@ FileIterator::const_iterator FileIterator::end() const
// #pragma mark -- FileListIterator
-QTextCodec *encodingAt(const QList<QTextCodec *> &encodings, int index)
+QList<FileIterator::Item> constructItems(const FilePaths &fileList,
+ const QList<QTextCodec *> &encodings)
{
- if (index >= 0 && index < encodings.size())
- return encodings.at(index);
- return QTextCodec::codecForLocale();
+ QList<FileIterator::Item> items;
+ items.reserve(fileList.size());
+ QTextCodec *defaultEncoding = QTextCodec::codecForLocale();
+ for (int i = 0; i < fileList.size(); ++i)
+ items.append(FileIterator::Item(fileList.at(i), encodings.value(i, defaultEncoding)));
+ return items;
}
-FileListIterator::FileListIterator(const FilePaths &fileList, const QList<QTextCodec *> encodings)
- : m_maxIndex(-1)
+FileListIterator::FileListIterator(const FilePaths &fileList, const QList<QTextCodec *> &encodings)
+ : m_items(constructItems(fileList, encodings))
{
- m_items.reserve(fileList.size());
- for (int i = 0; i < fileList.size(); ++i)
- m_items.append(Item(fileList.at(i), encodingAt(encodings, i)));
}
void FileListIterator::update(int requestedIndex)