mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-03-03 16:13:44 +00:00
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:
parent
2a661f3f73
commit
33a0bce133
@ -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();
|
||||
}
|
||||
|
||||
|
12
clang-tools-extra/test/clang-tidy/deduplication.cpp
Normal file
12
clang-tools-extra/test/clang-tidy/deduplication.cpp
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user