diff options
| author | Rui Ueyama <ruiu@google.com> | 2019-08-02 07:22:34 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2019-08-02 07:22:34 +0000 |
| commit | 4d41c332ef57281973e5e73295a56132ae12df77 (patch) | |
| tree | 2fd94fb54c00a1233ce74978d3148d250bca01cd /clang/tools | |
| parent | 206fe82be410ff8cc7619c89afdff6561275a015 (diff) | |
| download | bcm5719-llvm-4d41c332ef57281973e5e73295a56132ae12df77.tar.gz bcm5719-llvm-4d41c332ef57281973e5e73295a56132ae12df77.zip | |
Revert r367649: Improve raw_ostream so that you can "write" colors using operator<<
This reverts commit r367649 in an attempt to unbreak Windows bots.
llvm-svn: 367658
Diffstat (limited to 'clang/tools')
| -rw-r--r-- | clang/tools/diagtool/TreeView.cpp | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/clang/tools/diagtool/TreeView.cpp b/clang/tools/diagtool/TreeView.cpp index 9bb710775d0..154c52a485a 100644 --- a/clang/tools/diagtool/TreeView.cpp +++ b/clang/tools/diagtool/TreeView.cpp @@ -20,16 +20,29 @@ DEF_DIAGTOOL("tree", "Show warning flags in a tree view", TreeView) using namespace clang; using namespace diagtool; -class TreePrinter { - using Color = llvm::raw_ostream::Color; +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 { public: llvm::raw_ostream &out; + const bool ShowColors; bool Internal; - TreePrinter(llvm::raw_ostream &out) : out(out), Internal(false) { - if (&out != &llvm::errs() && &out != &llvm::outs()) - out.disable_colors(); + 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(Color, false, false); + } + + void resetColor() { + if (ShowColors) + out << llvm::sys::Process::ResetColor(); } static bool isIgnored(unsigned DiagID) { @@ -57,11 +70,12 @@ public: out.indent(Indent * 2); if (enabledByDefault(Group)) - out << Color::GREEN; + setColor(llvm::raw_ostream::GREEN); else - out << Color::YELLOW; + setColor(llvm::raw_ostream::YELLOW); - out << "-W" << Group.getName() << "\n" << Color::RESET; + out << "-W" << Group.getName() << "\n"; + resetColor(); ++Indent; for (const GroupRecord &GR : Group.subgroups()) { @@ -70,10 +84,12 @@ public: if (Internal) { for (const DiagnosticRecord &DR : Group.diagnostics()) { - if (!isIgnored(DR.DiagID)) - out << Color::GREEN; + if (ShowColors && !isIgnored(DR.DiagID)) + setColor(llvm::raw_ostream::GREEN); out.indent(Indent * 2); - out << DR.getName() << Color::RESET << "\n"; + out << DR.getName(); + resetColor(); + out << "\n"; } } } @@ -119,9 +135,13 @@ public: } void showKey() { - out << '\n' - << Color::GREEN << "GREEN" << Color::RESET - << " = enabled by default\n\n"; + if (ShowColors) { + out << '\n'; + setColor(llvm::raw_ostream::GREEN); + out << "GREEN"; + resetColor(); + out << " = enabled by default\n\n"; + } } }; |

