[PATCH] D116163: [clang-tidy] Add a SuppressedChecks option to ignore diagnostics from specific checks

2021-12-22 Thread Guillermo Rey via Phabricator via cfe-commits
reyg created this revision.
reyg added a reviewer: cfe-commits.
Herald added subscribers: carlosgalvezp, xazax.hun.
reyg requested review of this revision.
Herald added a project: clang-tools-extra.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116163

Files:
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
  clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
  clang-tools-extra/clang-tidy/ClangTidyOptions.h
  clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
  clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp
  clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Index: clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
===
--- clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
+++ clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
@@ -76,12 +76,14 @@
 TEST(ParseConfiguration, ValidConfiguration) {
   llvm::ErrorOr Options =
   parseConfiguration(llvm::MemoryBufferRef("Checks: \"-*,misc-*\"\n"
+   "SuppressedChecks: \"noisy-*\"\n"
"HeaderFilterRegex: \".*\"\n"
"AnalyzeTemporaryDtors: true\n"
"User: some.user",
"Options"));
   EXPECT_TRUE(!!Options);
   EXPECT_EQ("-*,misc-*", *Options->Checks);
+  EXPECT_EQ("noisy-*", *Options->SuppressedChecks);
   EXPECT_EQ(".*", *Options->HeaderFilterRegex);
   EXPECT_EQ("some.user", *Options->User);
 }
@@ -90,6 +92,7 @@
   llvm::ErrorOr Options1 =
   parseConfiguration(llvm::MemoryBufferRef(R"(
   Checks: "check1,check2"
+  SuppressedChecks: "noisycheck1,noisycheck2"
   HeaderFilterRegex: "filter1"
   AnalyzeTemporaryDtors: true
   User: user1
@@ -102,6 +105,7 @@
   llvm::ErrorOr Options2 =
   parseConfiguration(llvm::MemoryBufferRef(R"(
   Checks: "check3,check4"
+  SuppressedChecks: "noisycheck3,noisycheck4"
   HeaderFilterRegex: "filter2"
   AnalyzeTemporaryDtors: false
   User: user2
@@ -113,6 +117,8 @@
   ASSERT_TRUE(!!Options2);
   ClangTidyOptions Options = Options1->merge(*Options2, 0);
   EXPECT_EQ("check1,check2,check3,check4", *Options.Checks);
+  EXPECT_EQ("noisycheck1,noisycheck2,noisycheck3,noisycheck4",
+*Options.SuppressedChecks);
   EXPECT_EQ("filter2", *Options.HeaderFilterRegex);
   EXPECT_EQ("user2", *Options.User);
   ASSERT_TRUE(Options.ExtraArgs.hasValue());
Index: clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp
===
--- clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp
+++ clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp
@@ -24,6 +24,19 @@
   }
 };
 
+// Test that has name == "test-check-noisy" and outputs exactly one diagnostic.
+class NoisyCheck : public ClangTidyCheck {
+public:
+  NoisyCheck(StringRef Name, ClangTidyContext *Context)
+  : ClangTidyCheck("test-check-noisy", Context) {}
+  void registerMatchers(ast_matchers::MatchFinder *Finder) override {
+Finder->addMatcher(ast_matchers::varDecl().bind("var"), this);
+  }
+  void check(const ast_matchers::MatchFinder::MatchResult &Result) override {
+diag("Some diagnostic");
+  }
+};
+
 class HighlightTestCheck : public ClangTidyCheck {
 public:
   HighlightTestCheck(StringRef Name, ClangTidyContext *Context)
@@ -75,6 +88,27 @@
   EXPECT_EQ("variable", Errors[2].Message.Message);
 }
 
+TEST(ClangTidyDiagnosticConsumer, SkipsSuppressedChecks) {
+  std::vector Errors;
+  ClangTidyOptions CustomOptions;
+  CustomOptions.SuppressedChecks = "*noisy*";
+  runCheckOnCode("int a;", &Errors, "input.cc", None,
+CustomOptions);
+  // 4 comming from TestCheck, 0 from NoisyCheck (since it's suppressed).
+  EXPECT_EQ(3ul, Errors.size());
+}
+
+TEST(ClangTidyDiagnosticConsumer, ChecksIfNotSuppressed) {
+  std::vector Errors;
+  ClangTidyOptions CustomOptions;
+  CustomOptions.SuppressedChecks = "*different_glob*";
+  runCheckOnCode("int a;", &Errors, "input.cc", None,
+CustomOptions);
+
+  // 4 comming from TestCheck, 1 from NoisyCheck.
+  EXPECT_EQ(4ul, Errors.size());
+}
+
 TEST(ClangTidyDiagnosticConsumer, HandlesSourceRangeHighlight) {
   std::vector Errors;
   runCheckOnCode("int abc;", &Errors);
Index: clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
===
--- clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
+++ clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
@@ -298,6 +298,7 @@
 
   ClangTidyOptions DefaultOptions;
   DefaultOptions.Checks = DefaultChecks;
+  DefaultOptions.

[PATCH] D116163: [clang-tidy] Add a SuppressedChecks option to ignore diagnostics from specific checks

2021-12-22 Thread Guillermo Rey via Phabricator via cfe-commits
reyg added a comment.

I actually couldn't find a way to black-list specific checks. Is there a way to 
do that?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116163/new/

https://reviews.llvm.org/D116163

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116163: [clang-tidy] Add a SuppressedChecks option to ignore diagnostics from specific checks

2021-12-22 Thread Guillermo Rey via Phabricator via cfe-commits
reyg abandoned this revision.
reyg added a comment.

Well now I feel stupid for not realizing that, thanks for pointing it out :)

At least I learned how to hack around in clang-tidy 😄


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116163/new/

https://reviews.llvm.org/D116163

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits