[PATCH] Deduplicate clang-tidy error messages by file, offset and message.
Alexander Kornienko
alexfh at google.com
Thu Mar 6 09:39:31 PST 2014
Addressed review comments.
Hi djasper, pcc,
http://llvm-reviews.chandlerc.com/D2989
CHANGE SINCE LAST DIFF
http://llvm-reviews.chandlerc.com/D2989?vs=7603&id=7604#toc
Files:
clang-tidy/ClangTidyDiagnosticConsumer.cpp
test/clang-tidy/deduplication.cpp
Index: clang-tidy/ClangTidyDiagnosticConsumer.cpp
===================================================================
--- clang-tidy/ClangTidyDiagnosticConsumer.cpp
+++ clang-tidy/ClangTidyDiagnosticConsumer.cpp
@@ -19,6 +19,8 @@
#include "ClangTidyDiagnosticConsumer.h"
#include "llvm/ADT/SmallString.h"
+#include <set>
+
namespace clang {
namespace tidy {
@@ -116,11 +118,31 @@
}
}
+struct LessClangTidyError {
+ bool operator()(const ClangTidyError *LHS, const ClangTidyError *RHS) const {
+ const ClangTidyMessage &M1 = LHS->Message;
+ const ClangTidyMessage &M2 = RHS->Message;
+
+ if (M1.FileOffset != M2.FileOffset)
+ return M1.FileOffset < M2.FileOffset;
+ int Result = M1.FilePath.compare(M2.FilePath);
+ if (Result != 0)
+ return Result < 0;
+ Result = M1.Message.compare(M2.Message);
+ if (Result != 0)
+ return Result < 0;
+ return false;
+ }
+};
+
// 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();
}
Index: test/clang-tidy/deduplication.cpp
===================================================================
--- /dev/null
+++ test/clang-tidy/deduplication.cpp
@@ -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;
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D2989.2.patch
Type: text/x-patch
Size: 1842 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140306/f91c9a9f/attachment.bin>
More information about the cfe-commits
mailing list