2018-03-09 09:56:24 +00:00
|
|
|
//===- WithColor.cpp ------------------------------------------------------===//
|
|
|
|
//
|
2019-01-19 08:50:56 +00:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2018-03-09 09:56:24 +00:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
#include "llvm/Support/WithColor.h"
|
|
|
|
#include "llvm/Support/raw_ostream.h"
|
|
|
|
|
|
|
|
using namespace llvm;
|
|
|
|
|
2018-05-24 11:36:57 +00:00
|
|
|
cl::OptionCategory llvm::ColorCategory("Color Options");
|
|
|
|
|
2018-03-09 09:56:24 +00:00
|
|
|
static cl::opt<cl::boolOrDefault>
|
2018-05-24 11:36:57 +00:00
|
|
|
UseColor("color", cl::cat(ColorCategory),
|
|
|
|
cl::desc("Use colors in output (default=autodetect)"),
|
2018-03-09 09:56:24 +00:00
|
|
|
cl::init(cl::BOU_UNSET));
|
|
|
|
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
WithColor::WithColor(raw_ostream &OS, HighlightColor Color, bool DisableColors)
|
|
|
|
: OS(OS), DisableColors(DisableColors) {
|
2018-03-09 09:56:24 +00:00
|
|
|
// Detect color from terminal type unless the user passed the --color option.
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
if (colorsEnabled()) {
|
2018-03-09 09:56:24 +00:00
|
|
|
switch (Color) {
|
|
|
|
case HighlightColor::Address:
|
|
|
|
OS.changeColor(raw_ostream::YELLOW);
|
|
|
|
break;
|
|
|
|
case HighlightColor::String:
|
|
|
|
OS.changeColor(raw_ostream::GREEN);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Tag:
|
|
|
|
OS.changeColor(raw_ostream::BLUE);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Attribute:
|
|
|
|
OS.changeColor(raw_ostream::CYAN);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Enumerator:
|
|
|
|
OS.changeColor(raw_ostream::MAGENTA);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Macro:
|
|
|
|
OS.changeColor(raw_ostream::RED);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Error:
|
|
|
|
OS.changeColor(raw_ostream::RED, true);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Warning:
|
|
|
|
OS.changeColor(raw_ostream::MAGENTA, true);
|
|
|
|
break;
|
|
|
|
case HighlightColor::Note:
|
|
|
|
OS.changeColor(raw_ostream::BLACK, true);
|
|
|
|
break;
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
case HighlightColor::Remark:
|
|
|
|
OS.changeColor(raw_ostream::BLUE, true);
|
|
|
|
break;
|
2018-03-09 09:56:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-15 08:44:15 +00:00
|
|
|
raw_ostream &WithColor::error() { return error(errs()); }
|
|
|
|
|
|
|
|
raw_ostream &WithColor::warning() { return warning(errs()); }
|
|
|
|
|
|
|
|
raw_ostream &WithColor::note() { return note(errs()); }
|
|
|
|
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
raw_ostream &WithColor::remark() { return remark(errs()); }
|
|
|
|
|
|
|
|
raw_ostream &WithColor::error(raw_ostream &OS, StringRef Prefix,
|
|
|
|
bool DisableColors) {
|
2018-04-22 08:01:01 +00:00
|
|
|
if (!Prefix.empty())
|
|
|
|
OS << Prefix << ": ";
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
return WithColor(OS, HighlightColor::Error, DisableColors).get()
|
|
|
|
<< "error: ";
|
2018-04-14 21:36:42 +00:00
|
|
|
}
|
|
|
|
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
raw_ostream &WithColor::warning(raw_ostream &OS, StringRef Prefix,
|
|
|
|
bool DisableColors) {
|
2018-04-22 08:01:01 +00:00
|
|
|
if (!Prefix.empty())
|
|
|
|
OS << Prefix << ": ";
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
return WithColor(OS, HighlightColor::Warning, DisableColors).get()
|
|
|
|
<< "warning: ";
|
2018-04-14 21:36:42 +00:00
|
|
|
}
|
|
|
|
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
raw_ostream &WithColor::note(raw_ostream &OS, StringRef Prefix,
|
|
|
|
bool DisableColors) {
|
2018-04-22 08:01:01 +00:00
|
|
|
if (!Prefix.empty())
|
|
|
|
OS << Prefix << ": ";
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
return WithColor(OS, HighlightColor::Note, DisableColors).get() << "note: ";
|
2018-04-14 21:36:42 +00:00
|
|
|
}
|
|
|
|
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
raw_ostream &WithColor::remark(raw_ostream &OS, StringRef Prefix,
|
|
|
|
bool DisableColors) {
|
|
|
|
if (!Prefix.empty())
|
|
|
|
OS << Prefix << ": ";
|
|
|
|
return WithColor(OS, HighlightColor::Remark, DisableColors).get()
|
|
|
|
<< "remark: ";
|
|
|
|
}
|
|
|
|
|
|
|
|
bool WithColor::colorsEnabled() {
|
|
|
|
if (DisableColors)
|
|
|
|
return false;
|
|
|
|
if (UseColor == cl::BOU_UNSET)
|
|
|
|
return OS.has_colors();
|
|
|
|
return UseColor == cl::BOU_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
WithColor &WithColor::changeColor(raw_ostream::Colors Color, bool Bold,
|
|
|
|
bool BG) {
|
|
|
|
if (colorsEnabled())
|
|
|
|
OS.changeColor(Color, Bold, BG);
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
WithColor &WithColor::resetColor() {
|
|
|
|
if (colorsEnabled())
|
2018-03-09 09:56:24 +00:00
|
|
|
OS.resetColor();
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
return *this;
|
2018-03-09 09:56:24 +00:00
|
|
|
}
|
[SourceMgr][FileCheck] Obey -color by extending WithColor
(Relands r344930, reverted in r344935, and now hopefully fixed for
Windows.)
While this change specifically targets FileCheck, it affects any tool
using the same SourceMgr facilities.
Previously, -color was documented in FileCheck's -help output, but
-color had no effect. Now, -color obeys its documentation: it forces
colors to be used in FileCheck diagnostics even when stderr is not a
terminal.
-color is especially helpful when combined with FileCheck's -v, which
can produce a long series of diagnostics that you might wish to pipe
to a pager, such as less -R. The WithColor extensions here will also
help to clean up color usage in FileCheck's annotated dump of input,
which is proposed in D52999.
Reviewed By: JDevlieghere, zturner
Differential Revision: https://reviews.llvm.org/D53419
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345202 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-24 21:46:42 +00:00
|
|
|
|
|
|
|
WithColor::~WithColor() { resetColor(); }
|