aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cppmodelmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cppeditor/cppmodelmanager.cpp')
-rw-r--r--src/plugins/cppeditor/cppmodelmanager.cpp39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp
index 49e42e3eb5f..b702ebabc01 100644
--- a/src/plugins/cppeditor/cppmodelmanager.cpp
+++ b/src/plugins/cppeditor/cppmodelmanager.cpp
@@ -69,6 +69,8 @@
#include <QMutexLocker>
#include <QReadLocker>
#include <QReadWriteLock>
+#include <QRegularExpression>
+#include <QRegularExpressionMatch>
#include <QTextBlock>
#include <QThreadPool>
#include <QTimer>
@@ -1050,20 +1052,45 @@ CppLocatorData *CppModelManager::locatorData() const
return &d->m_locatorData;
}
-static QSet<QString> tooBigFilesRemoved(const QSet<QString> &files, int fileSizeLimitInMb)
+static QSet<QString> filteredFilesRemoved(const QSet<QString> &files, int fileSizeLimitInMb,
+ bool ignoreFiles,
+ const QString& ignorePattern)
{
- if (fileSizeLimitInMb <= 0)
+ if (fileSizeLimitInMb <= 0 && !ignoreFiles)
return files;
QSet<QString> result;
QFileInfo fileInfo;
+ QList<QRegularExpression> regexes;
+ const QStringList wildcards = ignorePattern.split('\n');
+
+ for (const QString &wildcard : wildcards)
+ regexes.append(QRegularExpression::fromWildcard(wildcard, Qt::CaseInsensitive,
+ QRegularExpression::UnanchoredWildcardConversion));
for (const QString &filePath : files) {
fileInfo.setFile(filePath);
- if (fileSizeExceedsLimit(fileInfo, fileSizeLimitInMb))
+ if (fileSizeLimitInMb > 0 && fileSizeExceedsLimit(fileInfo, fileSizeLimitInMb))
continue;
+ bool skip = false;
+ if (ignoreFiles) {
+ for (const QRegularExpression &rx: std::as_const(regexes)) {
+ QRegularExpressionMatch match = rx.match(fileInfo.absoluteFilePath());
+ if (match.hasMatch()) {
+ const QString msg = QCoreApplication::translate(
+ "CppIndexer",
+ "C++ Indexer: Skipping file \"%1\" because its path matches the ignore pattern.")
+ .arg(filePath);
+ QMetaObject::invokeMethod(Core::MessageManager::instance(),
+ [msg]() { Core::MessageManager::writeSilently(msg); });
+ skip = true;
+ break;
+ }
+ }
+ }
- result << filePath;
+ if (!skip)
+ result << filePath;
}
return result;
@@ -1075,7 +1102,9 @@ QFuture<void> CppModelManager::updateSourceFiles(const QSet<QString> &sourceFile
if (sourceFiles.isEmpty() || !d->m_indexerEnabled)
return QFuture<void>();
- const QSet<QString> filteredFiles = tooBigFilesRemoved(sourceFiles, indexerFileSizeLimitInMb());
+ const QSet<QString> filteredFiles = filteredFilesRemoved(sourceFiles, indexerFileSizeLimitInMb(),
+ codeModelSettings()->ignoreFiles(),
+ codeModelSettings()->ignorePattern());
return d->m_internalIndexingSupport->refreshSourceFiles(filteredFiles, mode);
}