diff --git a/clang/tools/diagtool/TreeView.cpp b/clang/tools/diagtool/TreeView.cpp --- a/clang/tools/diagtool/TreeView.cpp +++ b/clang/tools/diagtool/TreeView.cpp @@ -27,24 +27,13 @@ } 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 +60,11 @@ 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 +73,10 @@ 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 +122,8 @@ } 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 +163,9 @@ return -1; } + if (!hasColors(out)) + out.enable_colors(false); + TreePrinter TP(out); TP.Internal = Internal; TP.showKey();