diff --git a/clang/tools/diagtool/TreeView.cpp b/clang/tools/diagtool/TreeView.cpp index 5160afc64ab2..96951287cc4e 100644 --- a/clang/tools/diagtool/TreeView.cpp +++ b/clang/tools/diagtool/TreeView.cpp @@ -20,31 +20,14 @@ DEF_DIAGTOOL("tree", "Show warning flags in a tree view", TreeView) using namespace clang; using namespace diagtool; -static bool hasColors(const llvm::raw_ostream &out) { - if (&out != &llvm::errs() && &out != &llvm::outs()) - return false; - return llvm::errs().is_displayed() && llvm::outs().is_displayed(); -} - class TreePrinter { + using Colors = llvm::raw_ostream::Colors; + public: llvm::raw_ostream &out; - const bool ShowColors; bool Internal; - TreePrinter(llvm::raw_ostream &out) - : out(out), ShowColors(hasColors(out)), Internal(false) {} - - void setColor(llvm::raw_ostream::Colors Color) { - if (ShowColors) - out << llvm::sys::Process::OutputColor(static_cast(Color), false, - false); - } - - void resetColor() { - if (ShowColors) - out << llvm::sys::Process::ResetColor(); - } + TreePrinter(llvm::raw_ostream &out) : out(out), Internal(false) {} static bool isIgnored(unsigned DiagID) { // FIXME: This feels like a hack. @@ -71,12 +54,11 @@ public: out.indent(Indent * 2); if (enabledByDefault(Group)) - setColor(llvm::raw_ostream::GREEN); + out << Colors::GREEN; else - setColor(llvm::raw_ostream::YELLOW); + out << Colors::YELLOW; - out << "-W" << Group.getName() << "\n"; - resetColor(); + out << "-W" << Group.getName() << "\n" << Colors::RESET; ++Indent; for (const GroupRecord &GR : Group.subgroups()) { @@ -85,12 +67,10 @@ public: if (Internal) { for (const DiagnosticRecord &DR : Group.diagnostics()) { - if (ShowColors && !isIgnored(DR.DiagID)) - setColor(llvm::raw_ostream::GREEN); + if (!isIgnored(DR.DiagID)) + out << Colors::GREEN; out.indent(Indent * 2); - out << DR.getName(); - resetColor(); - out << "\n"; + out << DR.getName() << Colors::RESET << "\n"; } } } @@ -136,13 +116,8 @@ public: } void showKey() { - if (ShowColors) { - out << '\n'; - setColor(llvm::raw_ostream::GREEN); - out << "GREEN"; - resetColor(); - out << " = enabled by default\n\n"; - } + out << '\n' << Colors::GREEN << "GREEN" << Colors::RESET + << " = enabled by default\n\n"; } }; @@ -182,6 +157,8 @@ int TreeView::run(unsigned int argc, char **argv, llvm::raw_ostream &out) { return -1; } + out.enable_colors(out.has_colors()); + TreePrinter TP(out); TP.Internal = Internal; TP.showKey();