[cfe-commits] r165338 - /cfe/trunk/tools/diagtool/TreeView.cpp

Ted Kremenek kremenek at apple.com
Fri Oct 5 15:07:14 PDT 2012


Author: kremenek
Date: Fri Oct  5 17:07:14 2012
New Revision: 165338

URL: http://llvm.org/viewvc/llvm-project?rev=165338&view=rev
Log:
Add color output to 'diagtool tree' to show what warnings are enabled by default.

Modified:
    cfe/trunk/tools/diagtool/TreeView.cpp

Modified: cfe/trunk/tools/diagtool/TreeView.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/diagtool/TreeView.cpp?rev=165338&r1=165337&r2=165338&view=diff
==============================================================================
--- cfe/trunk/tools/diagtool/TreeView.cpp (original)
+++ cfe/trunk/tools/diagtool/TreeView.cpp Fri Oct  5 17:07:14 2012
@@ -19,6 +19,7 @@
 #include "llvm/ADT/DenseSet.h"
 #include "clang/AST/ASTDiagnostic.h"
 #include "clang/Basic/AllDiagnostics.h"
+#include "llvm/Support/Process.h"
 
 DEF_DIAGTOOL("tree",
              "Show warning flags in a tree view",
@@ -31,11 +32,37 @@
   llvm::errs() << "Usage: diagtool tree [--flags-only] [<diagnostic-group>]\n";
 }
 
+static bool showColors(llvm::raw_ostream &out) {
+  if (&out != &llvm::errs() && &out != &llvm::outs())
+    return false;
+  return llvm::errs().is_displayed() && llvm::outs().is_displayed();
+}
+
+static void setColor(bool ShowColors, llvm::raw_ostream &out,
+                     llvm::raw_ostream::Colors Color) {
+  if (ShowColors)
+    out << llvm::sys::Process::OutputColor(Color, false, false);
+}
+
+static void resetColor(bool ShowColors, llvm::raw_ostream &out) {
+  if (ShowColors)
+    out << llvm::sys::Process::ResetColor();
+}
+
+static clang::DiagnosticsEngine::Level getLevel(unsigned DiagID) {
+  static clang::DiagnosticsEngine Diags(new DiagnosticIDs);
+  return Diags.getDiagnosticLevel(DiagID, SourceLocation());
+}
+
 static void printGroup(llvm::raw_ostream &out, const GroupRecord &Group,
                        bool FlagsOnly, unsigned Indent = 0) {
   out.indent(Indent * 2);
+  
+  bool ShowColors = showColors(out);
+  setColor(ShowColors, out, llvm::raw_ostream::YELLOW);
   out << "-W" << Group.getName() << "\n";
-
+  resetColor(ShowColors, out);
+  
   ++Indent;
   for (GroupRecord::subgroup_iterator I = Group.subgroup_begin(),
                                       E = Group.subgroup_end();
@@ -47,8 +74,15 @@
     for (GroupRecord::diagnostics_iterator I = Group.diagnostics_begin(),
                                            E = Group.diagnostics_end();
          I != E; ++I) {
+      if (ShowColors) {
+        if (getLevel(I->DiagID) != DiagnosticsEngine::Ignored) {
+          setColor(ShowColors, out, llvm::raw_ostream::GREEN);
+        }
+      }
       out.indent(Indent * 2);
-      out << I->getName() << "\n";
+      out << I->getName();
+      resetColor(ShowColors, out);
+      out << "\n";
     }
   }
 }
@@ -106,7 +140,7 @@
       ++argv;
     }
   }
-
+  
   bool ShowAll = false;
   StringRef RootGroup;
 
@@ -127,6 +161,14 @@
     return -1;
   }
 
+  if (showColors(out)) {
+    out << '\n';
+    setColor(true, out, llvm::raw_ostream::GREEN);
+    out << "GREEN";
+    resetColor(true, out);
+    out << " = enabled by default\n\n";
+  }
+  
   if (ShowAll)
     return showAll(out, FlagsOnly);
 





More information about the cfe-commits mailing list