[PATCH] D18694: [ClangTidy] Add an 'explain-checks' option to diagnose where each checks comes from.

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 1 08:07:52 PDT 2016


alexfh added a comment.

Nice! I like the idea, but we need to figure out a bunch of details (see the comments inline).


================
Comment at: clang-tidy/ClangTidyOptions.cpp:264
@@ +263,3 @@
+      ParsedOptions->CheckSources[*ParsedOptions->Checks] =
+          std::string(ConfigFile.c_str());
+    }
----------------
`ConfigFile.str()` should also work.

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:131
@@ -130,1 +130,3 @@
 
+static cl::opt<bool> ExplainChecks("explain-checks", cl::desc(R"(
+explains where each check comes from, i.e. command line, .clang-tidy
----------------
I would expect something different from an option named '-explain-checks', e.g. some kind of a short documentation on each check or the like. Something like `explain-config` or `describe-config` would be closer to what the option does, I think.

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:132
@@ +131,3 @@
+static cl::opt<bool> ExplainChecks("explain-checks", cl::desc(R"(
+explains where each check comes from, i.e. command line, .clang-tidy
+configuration file.
----------------
How about `for each enabled check explains, where it is enabled, i.e. in clang-tidy binary, command line or a specific configuration file`?

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:265
@@ -258,2 +264,3 @@
   DefaultOptions.Checks = DefaultChecks;
+  DefaultOptions.CheckSources[DefaultChecks] = "ClangTidy binary";
   DefaultOptions.WarningsAsErrors = "";
----------------
s/ClangTidy/clang-tidy/

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:278
@@ -270,1 +277,3 @@
     OverrideOptions.Checks = Checks;
+    OverrideOptions.CheckSources[Checks] = "command-line argument 'checks'";
+  }
----------------
s/argument 'checks'/option '-checks'/

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:294
@@ +293,3 @@
+        ParsedConfig->CheckSources[*ParsedConfig->Checks] =
+            "command-line argument 'config'";
+      }
----------------
s/argument 'config'/option '-config'/

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:329
@@ +328,3 @@
+    for (const std::string& Check : EnabledChecks) {
+      for (const ClangTidyOptions::StringPair &CheckSource:
+           EffectiveOptions.CheckSources) {
----------------
I'm not sure I understand how this should work in case a check is:
1. enabled in binary (e.g. `-*,a`)
2. disabled in the config file (e.g. `-a`)
3. enabled again on the command line (e.g. `a`)

clang-tidy should say 'command line' in this case, but i'm not sure what your implementation will do, since it doesn't seem to keep the order of the configurations.

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:331
@@ +330,3 @@
+           EffectiveOptions.CheckSources) {
+        GlobList filter(CheckSource.first);
+        if (filter.contains(Check)) {
----------------
nit: Filter

You could also write `if (GlobList(CheckSource.first).contains(Check)) {`

================
Comment at: clang-tidy/tool/ClangTidyMain.cpp:333
@@ +332,3 @@
+        if (filter.contains(Check)) {
+          llvm::outs() << "'" << Check << "' comes from " << CheckSource.second
+                       << ".\n";
----------------
s/comes from/is enabled in the/


Repository:
  rL LLVM

http://reviews.llvm.org/D18694





More information about the cfe-commits mailing list