Deduplicate clang-tidy error messages by file, offset and message.

Summary: Peter, I guess, this can help you in testing your check.

Reviewers: djasper, pcc, klimek

Reviewed By: klimek

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D2989

llvm-svn: 203451
This commit is contained in:
Alexander Kornienko 2014-03-10 09:45:49 +00:00
parent 2a661f3f73
commit 33a0bce133
2 changed files with 30 additions and 2 deletions

View File

@ -19,6 +19,9 @@
#include "ClangTidyDiagnosticConsumer.h"
#include "llvm/ADT/SmallString.h"
#include <set>
#include <tuple>
namespace clang {
namespace tidy {
@ -116,11 +119,24 @@ void ClangTidyDiagnosticConsumer::HandleDiagnostic(
}
}
struct LessClangTidyError {
bool operator()(const ClangTidyError *LHS, const ClangTidyError *RHS) const {
const ClangTidyMessage &M1 = LHS->Message;
const ClangTidyMessage &M2 = RHS->Message;
return std::tie(M1.FilePath, M1.FileOffset, M1.Message) <
std::tie(M2.FilePath, M2.FileOffset, M2.Message);
}
};
// Flushes the internal diagnostics buffer to the ClangTidyContext.
void ClangTidyDiagnosticConsumer::finish() {
finalizeLastError();
for (const ClangTidyError &Error : Errors)
Context.storeError(Error);
std::set<const ClangTidyError*, LessClangTidyError> UniqueErrors;
for (const ClangTidyError &Error : Errors) {
if (UniqueErrors.insert(&Error).second)
Context.storeError(Error);
}
Errors.clear();
}

View File

@ -0,0 +1,12 @@
// RUN: clang-tidy -checks=google-explicit-constructor %s -- | FileCheck %s
template<typename T>
class A { A(T); };
// CHECK: :[[@LINE-1]]:11: warning: Single-argument constructors must be explicit [google-explicit-constructor]
// CHECK-NOT: warning:
void f() {
A<int> a;
A<double> b;
}