From 0979a586893058bcca524ea45d9b5c090d77c634 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 26 Jul 2019 12:44:17 +0200 Subject: [PATCH] ClangTools: Extract filtering in readSerializedDiagnostics() Change-Id: I07a4339af72d1e232eb7fe152a6af133a6a94436 Reviewed-by: David Schulz --- src/plugins/clangtools/clangtidyclazytool.cpp | 6 +++++- src/plugins/clangtools/clangtoolslogfilereader.cpp | 12 ++++++------ src/plugins/clangtools/clangtoolslogfilereader.h | 6 +++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/plugins/clangtools/clangtidyclazytool.cpp b/src/plugins/clangtools/clangtidyclazytool.cpp index 62940b00a92..a76f7e728dd 100644 --- a/src/plugins/clangtools/clangtidyclazytool.cpp +++ b/src/plugins/clangtools/clangtidyclazytool.cpp @@ -468,9 +468,13 @@ Diagnostics ClangTidyClazyTool::read(const QString &logFilePath, const QSet &projectFiles, QString *errorMessage) const { + const auto acceptFromFilePath = [projectFiles](const Utils::FilePath &filePath) { + return projectFiles.contains(filePath); + }; + return readSerializedDiagnostics(Utils::FilePath::fromString(logFilePath), Utils::FilePath::fromString(mainFilePath), - projectFiles, + acceptFromFilePath, errorMessage); } diff --git a/src/plugins/clangtools/clangtoolslogfilereader.cpp b/src/plugins/clangtools/clangtoolslogfilereader.cpp index 4c4dc50c27b..afca7d96179 100644 --- a/src/plugins/clangtools/clangtoolslogfilereader.cpp +++ b/src/plugins/clangtools/clangtoolslogfilereader.cpp @@ -122,7 +122,7 @@ static ExplainingStep buildFixIt(const CXDiagnostic cxDiagnostic, unsigned index } static Diagnostic buildDiagnostic(const CXDiagnostic cxDiagnostic, - const QSet &projectFiles, + const AcceptDiagsFromFilePath &acceptFromFilePath, const QString &nativeFilePath) { Diagnostic diagnostic; @@ -136,7 +136,7 @@ static Diagnostic buildDiagnostic(const CXDiagnostic cxDiagnostic, diagnostic.location = diagLocationFromSourceLocation(cxLocation); const auto diagnosticFilePath = Utils::FilePath::fromString(diagnostic.location.filePath); - if (!projectFiles.contains(diagnosticFilePath)) + if (acceptFromFilePath && !acceptFromFilePath(diagnosticFilePath)) return diagnostic; // TODO: Introduce CppTools::ProjectFile::isGenerated to filter these out properly @@ -184,7 +184,7 @@ static Diagnostic buildDiagnostic(const CXDiagnostic cxDiagnostic, static Diagnostics readSerializedDiagnostics_helper(const Utils::FilePath &logFilePath, const Utils::FilePath &mainFilePath, - const QSet &projectFiles) + const AcceptDiagsFromFilePath &acceptFromFilePath) { Diagnostics list; CXLoadDiag_Error error; @@ -206,7 +206,7 @@ static Diagnostics readSerializedDiagnostics_helper(const Utils::FilePath &logFi Utils::ExecuteOnDestruction cleanUpDiagnostic([&]() { clang_disposeDiagnostic(cxDiagnostic); }); - const Diagnostic diagnostic = buildDiagnostic(cxDiagnostic, projectFiles, nativeFilePath); + const Diagnostic diagnostic = buildDiagnostic(cxDiagnostic, acceptFromFilePath, nativeFilePath); if (!diagnostic.isValid()) continue; @@ -233,13 +233,13 @@ static bool checkFilePath(const Utils::FilePath &filePath, QString *errorMessage Diagnostics readSerializedDiagnostics(const Utils::FilePath &logFilePath, const Utils::FilePath &mainFilePath, - const QSet &projectFiles, + const AcceptDiagsFromFilePath &acceptFromFilePath, QString *errorMessage) { if (!checkFilePath(logFilePath, errorMessage)) return {}; - return readSerializedDiagnostics_helper(logFilePath, mainFilePath, projectFiles); + return readSerializedDiagnostics_helper(logFilePath, mainFilePath, acceptFromFilePath); } } // namespace Internal diff --git a/src/plugins/clangtools/clangtoolslogfilereader.h b/src/plugins/clangtools/clangtoolslogfilereader.h index 5c686913f13..6bfa2f723cf 100644 --- a/src/plugins/clangtools/clangtoolslogfilereader.h +++ b/src/plugins/clangtools/clangtoolslogfilereader.h @@ -27,16 +27,16 @@ #include "clangtoolsdiagnostic.h" -#include - namespace Utils { class FilePath; } namespace ClangTools { namespace Internal { +using AcceptDiagsFromFilePath = std::function; + Diagnostics readSerializedDiagnostics(const Utils::FilePath &logFilePath, const Utils::FilePath &mainFilePath, - const QSet &projectFiles, + const AcceptDiagsFromFilePath &acceptFromFilePath, QString *errorMessage); } // namespace Internal