From: Jonas Devlieghere Date: Tue, 5 Sep 2017 18:04:40 +0000 (+0000) Subject: [diagtool] Change default tree behavior to print only flags X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a30feb06ef1ecc59dcd9dd3dfb46478c476be1d;p=clang [diagtool] Change default tree behavior to print only flags This patch changes the default behavior of `diagtool tree` to only display warning flags and not the internal warnings flags. The latter is an implementation detail of the compiler and usually not what the users wants. Furthermore, flags that are enabled by default are now also printed in green. Originally, this was only the case for the diagnostic names. Differential revision: https://reviews.llvm.org/D37390 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@312546 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Misc/warning-flags-tree.c b/test/Misc/warning-flags-tree.c index d71c9f618b..01ba4971ee 100644 --- a/test/Misc/warning-flags-tree.c +++ b/test/Misc/warning-flags-tree.c @@ -1,6 +1,6 @@ -// RUN: diagtool tree | FileCheck -strict-whitespace %s -// RUN: diagtool tree -Weverything | FileCheck -strict-whitespace %s -// RUN: diagtool tree everything | FileCheck -strict-whitespace %s +// RUN: diagtool tree --internal | FileCheck -strict-whitespace %s +// RUN: diagtool tree --internal -Weverything | FileCheck -strict-whitespace %s +// RUN: diagtool tree --internal everything | FileCheck -strict-whitespace %s // // These three ways of running diagtool tree are the same: // they produce a tree for every top-level diagnostic flag. @@ -29,8 +29,7 @@ // RUN: not diagtool tree -Wthis-is-not-a-valid-flag - -// RUN: diagtool tree -Wgnu | FileCheck -strict-whitespace -check-prefix CHECK-GNU %s +// RUN: diagtool tree --internal -Wgnu | FileCheck -strict-whitespace -check-prefix CHECK-GNU %s // CHECK-GNU: -Wgnu // CHECK-GNU: -Wgnu-designator // CHECK-GNU: ext_gnu_array_range @@ -40,7 +39,7 @@ // CHECK-GNU: ext_vla // There are more GNU extensions but we don't need to check them all. -// RUN: diagtool tree --flags-only -Wgnu | FileCheck -check-prefix CHECK-FLAGS-ONLY %s +// RUN: diagtool tree -Wgnu | FileCheck -check-prefix CHECK-FLAGS-ONLY %s // CHECK-FLAGS-ONLY: -Wgnu // CHECK-FLAGS-ONLY: -Wgnu-designator // CHECK-FLAGS-ONLY-NOT: ext_gnu_array_range diff --git a/tools/diagtool/TreeView.cpp b/tools/diagtool/TreeView.cpp index d1f3d3e652..b4846b5574 100644 --- a/tools/diagtool/TreeView.cpp +++ b/tools/diagtool/TreeView.cpp @@ -32,10 +32,10 @@ class TreePrinter { public: llvm::raw_ostream &out; const bool ShowColors; - bool FlagsOnly; + bool Internal; TreePrinter(llvm::raw_ostream &out) - : out(out), ShowColors(hasColors(out)), FlagsOnly(false) {} + : out(out), ShowColors(hasColors(out)), Internal(false) {} void setColor(llvm::raw_ostream::Colors Color) { if (ShowColors) @@ -54,10 +54,28 @@ public: return Diags.isIgnored(DiagID, SourceLocation()); } + static bool enabledByDefault(const GroupRecord &Group) { + for (const DiagnosticRecord &DR : Group.diagnostics()) { + if (isIgnored(DR.DiagID)) + return false; + } + + for (const GroupRecord &GR : Group.subgroups()) { + if (!enabledByDefault(GR)) + return false; + } + + return true; + } + void printGroup(const GroupRecord &Group, unsigned Indent = 0) { out.indent(Indent * 2); - setColor(llvm::raw_ostream::YELLOW); + if (enabledByDefault(Group)) + setColor(llvm::raw_ostream::GREEN); + else + setColor(llvm::raw_ostream::YELLOW); + out << "-W" << Group.getName() << "\n"; resetColor(); @@ -66,7 +84,7 @@ public: printGroup(GR, Indent); } - if (!FlagsOnly) { + if (Internal) { for (const DiagnosticRecord &DR : Group.diagnostics()) { if (ShowColors && !isIgnored(DR.DiagID)) setColor(llvm::raw_ostream::GREEN); @@ -132,16 +150,16 @@ public: }; static void printUsage() { - llvm::errs() << "Usage: diagtool tree [--flags-only] []\n"; + llvm::errs() << "Usage: diagtool tree [--internal] []\n"; } int TreeView::run(unsigned int argc, char **argv, llvm::raw_ostream &out) { // First check our one flag (--flags-only). - bool FlagsOnly = false; + bool Internal = false; if (argc > 0) { StringRef FirstArg(*argv); - if (FirstArg.equals("--flags-only")) { - FlagsOnly = true; + if (FirstArg.equals("--internal")) { + Internal = true; --argc; ++argv; } @@ -168,7 +186,7 @@ int TreeView::run(unsigned int argc, char **argv, llvm::raw_ostream &out) { } TreePrinter TP(out); - TP.FlagsOnly = FlagsOnly; + TP.Internal = Internal; TP.showKey(); return ShowAll ? TP.showAll() : TP.showGroup(RootGroup); }