LLVM  16.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 
17 using namespace llvm;
18 
20  static cl::OptionCategory ColorCategory("Color Options");
21  return ColorCategory;
22 }
23 namespace {
24 struct CreateUseColor {
25  static void *call() {
26  return new cl::opt<cl::boolOrDefault>(
27  "color", cl::cat(getColorCategory()),
28  cl::desc("Use colors in output (default=autodetect)"),
30  }
31 };
32 } // namespace
35 
36 static bool DefaultAutoDetectFunction(const raw_ostream &OS) {
37  return *UseColor == cl::BOU_UNSET ? OS.has_colors()
38  : *UseColor == cl::BOU_TRUE;
39 }
40 
41 WithColor::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) {
51  break;
54  break;
57  break;
60  break;
63  break;
66  break;
68  OS.changeColor(raw_ostream::RED, true);
69  break;
72  break;
75  break;
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 << ": ";
115  return WithColor(OS, HighlightColor::Note,
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) {
133  case ColorMode::Enable:
134  return true;
135  case ColorMode::Disable:
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 
160  WithColor::error() << Info.message() << '\n';
161  });
162 }
163 
166  WithColor::warning() << Info.message() << '\n';
167  });
168 }
169 
172 }
173 
175  AutoDetectFunctionType NewAutoDetectFunction) {
176  AutoDetectFunction = NewAutoDetectFunction;
177 }
UseColor
static ManagedStatic< cl::opt< cl::boolOrDefault >, CreateUseColor > UseColor
Definition: WithColor.cpp:33
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::cl::Prefix
@ Prefix
Definition: CommandLine.h:161
llvm::getColorCategory
cl::OptionCategory & getColorCategory()
Definition: WithColor.cpp:19
llvm::HighlightColor
HighlightColor
Definition: WithColor.h:26
ManagedStatic.h
llvm::WithColor::WithColor
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::WithColor::colorsEnabled
bool colorsEnabled()
Determine whether colors are displayed.
Definition: WithColor.cpp:131
Error.h
llvm::raw_ostream::GREEN
static constexpr Colors GREEN
Definition: raw_ostream.h:112
DebugOptions.h
llvm::WithColor::defaultErrorHandler
static void defaultErrorHandler(Error Err)
Implement default handling for Error.
Definition: WithColor.cpp:158
llvm::WithColor
An RAII object that temporarily switches an output stream to a specific color.
Definition: WithColor.h:53
llvm::errs
raw_fd_ostream & errs()
This returns a reference to a raw_ostream for standard error.
Definition: raw_ostream.cpp:891
llvm::raw_ostream::RED
static constexpr Colors RED
Definition: raw_ostream.h:111
llvm::WithColor::defaultWarningHandler
static void defaultWarningHandler(Error Warning)
Implement default handling for Warning.
Definition: WithColor.cpp:164
llvm::HighlightColor::Warning
@ Warning
llvm::HighlightColor::Note
@ Note
llvm::WithColor::remark
static raw_ostream & remark()
Convenience method for printing "remark: " to stderr.
Definition: WithColor.cpp:89
llvm::WithColor::error
static raw_ostream & error()
Convenience method for printing "error: " to stderr.
Definition: WithColor.cpp:83
llvm::raw_ostream::MAGENTA
static constexpr Colors MAGENTA
Definition: raw_ostream.h:115
CommandLine.h
llvm::WithColor::~WithColor
~WithColor()
Definition: WithColor.cpp:156
llvm::raw_ostream::changeColor
virtual raw_ostream & changeColor(enum Colors Color, bool Bold=false, bool BG=false)
Changes the foreground color of text that will be output from this point forward.
Definition: raw_ostream.cpp:519
llvm::HighlightColor::Tag
@ Tag
llvm::WithColor::AutoDetectFunctionType
bool(*)(const raw_ostream &OS) AutoDetectFunctionType
Definition: WithColor.h:55
llvm::HighlightColor::Enumerator
@ Enumerator
llvm::initWithColorOptions
void initWithColorOptions()
Definition: WithColor.cpp:34
llvm::ManagedStatic
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...
Definition: ManagedStatic.h:83
llvm::ColorMode::Auto
@ Auto
Determine whether to use color based on the command line argument and the raw_ostream.
llvm::ColorMode::Disable
@ Disable
Disable colors.
llvm::raw_ostream
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:53
llvm::WithColor::setAutoDetectFunction
static void setAutoDetectFunction(AutoDetectFunctionType NewAutoDetectFunction)
Change the global auto detection function.
Definition: WithColor.cpp:174
Info
Analysis containing CSE Info
Definition: CSEInfo.cpp:27
llvm::ErrorInfoBase
Base class for error info classes.
Definition: Error.h:46
llvm::HighlightColor::Remark
@ Remark
llvm::cl::opt
Definition: CommandLine.h:1412
llvm::WithColor::warning
static raw_ostream & warning()
Convenience method for printing "warning: " to stderr.
Definition: WithColor.cpp:85
llvm::cl::BOU_UNSET
@ BOU_UNSET
Definition: CommandLine.h:631
move
compiles ldr LCPI1_0 ldr ldr mov lsr tst moveq r1 ldr LCPI1_1 and r0 bx lr It would be better to do something like to fold the shift into the conditional move
Definition: README.txt:546
call
S is passed via registers r2 But gcc stores them to the and then reload them to and r3 before issuing the call(r0 contains the address of the format string)
Definition: README.txt:190
llvm::cl::init
initializer< Ty > init(const Ty &Val)
Definition: CommandLine.h:447
llvm::HighlightColor::Macro
@ Macro
llvm::HighlightColor::Address
@ Address
llvm::WithColor::changeColor
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.
Definition: WithColor.cpp:143
Mode
SI Whole Quad Mode
Definition: SIWholeQuadMode.cpp:264
llvm::HighlightColor::Error
@ Error
llvm::WithColor::resetColor
WithColor & resetColor()
Reset the colors to terminal defaults.
Definition: WithColor.cpp:150
llvm::raw_ostream::CYAN
static constexpr Colors CYAN
Definition: raw_ostream.h:116
DefaultAutoDetectFunction
static bool DefaultAutoDetectFunction(const raw_ostream &OS)
Definition: WithColor.cpp:36
llvm::HighlightColor::String
@ String
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
llvm_unreachable
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
Definition: ErrorHandling.h:143
llvm::ColorMode
ColorMode
Definition: WithColor.h:39
llvm::raw_ostream::has_colors
virtual bool has_colors() const
This function determines if this stream is displayed and supports colors.
Definition: raw_ostream.h:325
llvm::HighlightColor::Attribute
@ Attribute
WithColor.h
llvm::ColorMode::Enable
@ Enable
Enable colors.
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:155
llvm::cl::BOU_TRUE
@ BOU_TRUE
Definition: CommandLine.h:631
llvm::raw_ostream::BLACK
static constexpr Colors BLACK
Definition: raw_ostream.h:110
llvm::cl::cat
Definition: CommandLine.h:472
llvm::raw_ostream::Colors
Colors
Definition: raw_ostream.h:97
llvm::raw_ostream::resetColor
virtual raw_ostream & resetColor()
Resets the colors to terminal defaults.
Definition: raw_ostream.cpp:532
llvm::raw_ostream::BLUE
static constexpr Colors BLUE
Definition: raw_ostream.h:114
llvm::WithColor::note
static raw_ostream & note()
Convenience method for printing "note: " to stderr.
Definition: WithColor.cpp:87
llvm::raw_ostream::YELLOW
static constexpr Colors YELLOW
Definition: raw_ostream.h:113
llvm::cl::desc
Definition: CommandLine.h:413
llvm::handleAllErrors
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:965
llvm::WithColor::defaultAutoDetectFunction
static AutoDetectFunctionType defaultAutoDetectFunction()
Retrieve the default color auto detection function.
Definition: WithColor.cpp:170
llvm::cl::OptionCategory
Definition: CommandLine.h:182