LLVM 22.0.0git
WithColor.cpp
Go to the documentation of this file.
1//===- WithColor.cpp ------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
10
11#include "DebugOptions.h"
12
14#include "llvm/Support/Error.h"
16
17using namespace llvm;
18
20 static cl::OptionCategory ColorCategory("Color Options");
21 return ColorCategory;
22}
23namespace {
24struct CreateUseColor {
25 static void *call() {
27 "color", cl::cat(getColorCategory()),
28 cl::desc("Use colors in output (default=autodetect)"),
30 }
31};
32} // namespace
35
36static bool DefaultAutoDetectFunction(const raw_ostream &OS) {
37 return *UseColor == cl::BOU_UNSET ? OS.has_colors()
39}
40
41WithColor::AutoDetectFunctionType WithColor::AutoDetectFunction =
43
45 : OS(OS), Mode(Mode) {
46 // Detect color from terminal type unless the user passed the --color option.
47 if (colorsEnabled()) {
48 switch (Color) {
50 OS.changeColor(raw_ostream::YELLOW);
51 break;
53 OS.changeColor(raw_ostream::GREEN);
54 break;
56 OS.changeColor(raw_ostream::BLUE);
57 break;
59 OS.changeColor(raw_ostream::CYAN);
60 break;
62 OS.changeColor(raw_ostream::MAGENTA);
63 break;
65 OS.changeColor(raw_ostream::RED);
66 break;
68 OS.changeColor(raw_ostream::RED, true);
69 break;
71 OS.changeColor(raw_ostream::MAGENTA, true);
72 break;
74 OS.changeColor(raw_ostream::BLACK, true);
75 break;
77 OS.changeColor(raw_ostream::BLUE, true);
78 break;
79 }
80 }
81}
82
84
86
88
90
92 bool DisableColors) {
93 if (!Prefix.empty())
94 OS << Prefix << ": ";
96 DisableColors ? ColorMode::Disable : ColorMode::Auto)
97 .get()
98 << "error: ";
99}
100
102 bool DisableColors) {
103 if (!Prefix.empty())
104 OS << Prefix << ": ";
106 DisableColors ? ColorMode::Disable : ColorMode::Auto)
107 .get()
108 << "warning: ";
109}
110
112 bool DisableColors) {
113 if (!Prefix.empty())
114 OS << Prefix << ": ";
116 DisableColors ? ColorMode::Disable : ColorMode::Auto)
117 .get()
118 << "note: ";
119}
120
122 bool DisableColors) {
123 if (!Prefix.empty())
124 OS << Prefix << ": ";
126 DisableColors ? ColorMode::Disable : ColorMode::Auto)
127 .get()
128 << "remark: ";
129}
130
132 switch (Mode) {
134 return true;
136 return false;
137 case ColorMode::Auto:
138 return AutoDetectFunction(OS);
139 }
140 llvm_unreachable("All cases handled above.");
141}
142
144 bool BG) {
145 if (colorsEnabled())
146 OS.changeColor(Color, Bold, BG);
147 return *this;
148}
149
151 if (colorsEnabled())
152 OS.resetColor();
153 return *this;
154}
155
157
159 handleAllErrors(std::move(Err), [](ErrorInfoBase &Info) {
160 WithColor::error() << Info.message() << '\n';
161 });
162}
163
165 handleAllErrors(std::move(Warning), [](ErrorInfoBase &Info) {
166 WithColor::warning() << Info.message() << '\n';
167 });
168}
169
173
175 AutoDetectFunctionType NewAutoDetectFunction) {
176 AutoDetectFunction = NewAutoDetectFunction;
177}
static bool DefaultAutoDetectFunction(const raw_ostream &OS)
Definition WithColor.cpp:36
static ManagedStatic< cl::opt< cl::boolOrDefault >, CreateUseColor > UseColor
Definition WithColor.cpp:33
Base class for error info classes.
Definition Error.h:44
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
LLVM_ABI WithColor & changeColor(raw_ostream::Colors Color, bool Bold=false, bool BG=false)
Change the color of text that will be output from this point forward.
static LLVM_ABI void defaultWarningHandler(Error Warning)
Implement default handling for Warning.
LLVM_CTOR_NODISCARD LLVM_ABI WithColor(raw_ostream &OS, HighlightColor S, ColorMode Mode=ColorMode::Auto)
To be used like this: WithColor(OS, HighlightColor::String) << "text";.
Definition WithColor.cpp:44
LLVM_ABI bool colorsEnabled()
Determine whether colors are displayed.
static LLVM_ABI raw_ostream & warning()
Convenience method for printing "warning: " to stderr.
Definition WithColor.cpp:85
LLVM_ABI ~WithColor()
static LLVM_ABI raw_ostream & error()
Convenience method for printing "error: " to stderr.
Definition WithColor.cpp:83
bool(*)(const raw_ostream &OS) AutoDetectFunctionType
Definition WithColor.h:56
LLVM_ABI WithColor & resetColor()
Reset the colors to terminal defaults.
static LLVM_ABI void defaultErrorHandler(Error Err)
Implement default handling for Error.
static LLVM_ABI raw_ostream & note()
Convenience method for printing "note: " to stderr.
Definition WithColor.cpp:87
static LLVM_ABI AutoDetectFunctionType defaultAutoDetectFunction()
Retrieve the default color auto detection function.
static LLVM_ABI void setAutoDetectFunction(AutoDetectFunctionType NewAutoDetectFunction)
Change the global auto detection function.
static LLVM_ABI raw_ostream & remark()
Convenience method for printing "remark: " to stderr.
Definition WithColor.cpp:89
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition raw_ostream.h:53
static constexpr Colors YELLOW
static constexpr Colors CYAN
static constexpr Colors BLUE
static constexpr Colors MAGENTA
static constexpr Colors BLACK
static constexpr Colors GREEN
virtual bool has_colors() const
This function determines if this stream is displayed and supports colors.
static constexpr Colors RED
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
void initWithColorOptions()
Definition WithColor.cpp:34
void handleAllErrors(Error E, HandlerTs &&... Handlers)
Behaves the same as handleErrors, except that by contract all errors must be handled by the given han...
Definition Error.h:990
LLVM_ABI cl::OptionCategory & getColorCategory()
Definition WithColor.cpp:19
LLVM_ABI raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
HighlightColor
Definition WithColor.h:27
ColorMode
Definition WithColor.h:40
@ Auto
Determine whether to use color based on the command line argument and the raw_ostream.
Definition WithColor.h:43
@ Enable
Enable colors.
Definition WithColor.h:47
@ Disable
Disable colors.
Definition WithColor.h:49