From b2397b6b4faeca5e768bc68a3346fff9d04704f7 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 25 Jan 2016 16:38:28 +0100 Subject: Clang: Ignore certain warnings in header files We already had this workarounded, but it got lost in the refactorings. Task-number: QTCREATORBUG-12067 Change-Id: Ie01f9d41f25d17d1b595204748634bc87ef44378 Reviewed-by: Marco Bubke Reviewed-by: Nikolai Kosjar --- .../clangcodemodel/clangdiagnosticfilter.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/plugins/clangcodemodel') diff --git a/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp b/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp index 133b691525..ecd1edf0e5 100644 --- a/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp +++ b/src/plugins/clangcodemodel/clangdiagnosticfilter.cpp @@ -25,6 +25,10 @@ #include "clangdiagnosticfilter.h" +#include + +#include + namespace { bool isWarningOrNote(ClangBackEnd::DiagnosticSeverity severity) @@ -41,6 +45,17 @@ bool isWarningOrNote(ClangBackEnd::DiagnosticSeverity severity) Q_UNREACHABLE(); } +bool isBlackListedDiagnostic(const ClangBackEnd::DiagnosticContainer &diagnostic, + bool isHeaderFile) +{ + static const Utf8StringVector blackList { + Utf8StringLiteral("warning: #pragma once in main file"), + Utf8StringLiteral("warning: #include_next in primary source file") + }; + + return isHeaderFile && blackList.contains(diagnostic.text()); +} + template QVector filterDiagnostics(const QVector &diagnostics, @@ -76,8 +91,13 @@ namespace Internal { void ClangDiagnosticFilter::filterDocumentRelatedWarnings( const QVector &diagnostics) { - const auto isLocalWarning = [this] (const ClangBackEnd::DiagnosticContainer &diagnostic) { + using namespace CppTools; + const bool isHeaderFile = ProjectFile::isHeader(ProjectFile::classify(m_filePath)); + + const auto isLocalWarning = [this, isHeaderFile] + (const ClangBackEnd::DiagnosticContainer &diagnostic) { return isWarningOrNote(diagnostic.severity()) + && !isBlackListedDiagnostic(diagnostic, isHeaderFile) && diagnostic.location().filePath() == m_filePath; }; -- cgit v1.2.1