Index: cfe/trunk/test/Misc/warning-flags-tree.c =================================================================== --- cfe/trunk/test/Misc/warning-flags-tree.c +++ cfe/trunk/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 Index: cfe/trunk/tools/diagtool/TreeView.cpp =================================================================== --- cfe/trunk/tools/diagtool/TreeView.cpp +++ cfe/trunk/tools/diagtool/TreeView.cpp @@ -32,10 +32,10 @@ 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 @@ 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 @@ 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 @@ }; 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 @@ } TreePrinter TP(out); - TP.FlagsOnly = FlagsOnly; + TP.Internal = Internal; TP.showKey(); return ShowAll ? TP.showAll() : TP.showGroup(RootGroup); }