Move the message printing to a class-static function so that it can be

part of the TextDiagnostic interface without requiring a full instance.

llvm-svn: 142085
This commit is contained in:
Chandler Carruth 2011-10-15 22:57:29 +00:00
parent 3fc93892ae
commit 76576db69d
1 changed files with 45 additions and 28 deletions

View File

@ -405,31 +405,6 @@ static bool printWordWrapped(raw_ostream &OS, StringRef Str,
return Wrapped;
}
static void printDiagnosticMessage(raw_ostream &OS,
DiagnosticsEngine::Level Level,
StringRef Message,
unsigned CurrentColumn, unsigned Columns,
bool ShowColors) {
if (ShowColors) {
// Print warnings, errors and fatal errors in bold, no color
switch (Level) {
case DiagnosticsEngine::Warning: OS.changeColor(savedColor, true); break;
case DiagnosticsEngine::Error: OS.changeColor(savedColor, true); break;
case DiagnosticsEngine::Fatal: OS.changeColor(savedColor, true); break;
default: break; //don't bold notes
}
}
if (Columns)
printWordWrapped(OS, Message, Columns, CurrentColumn);
else
OS << Message;
if (ShowColors)
OS.resetColor();
OS << '\n';
}
namespace {
/// \brief Class to encapsulate the logic for formatting and printing a textual
@ -800,6 +775,47 @@ public:
OS.resetColor();
}
/// \brief Pretty-print a diagnostic message to a raw_ostream.
///
/// This is a static helper to handle the line wrapping, colorizing, and
/// rendering of a diagnostic message to a particular ostream. It is
/// publically visible so that clients which do not have sufficient state to
/// build a complete TextDiagnostic object can still get consistent
/// formatting of their diagnostic messages.
///
/// \param OS Where the message is printed
/// \param Level Used to colorizing the message
/// \param Message The text actually printed
/// \param CurrentColumn The starting column of the first line, accounting
/// for any prefix.
/// \param Columns The number of columns to use in line-wrapping, 0 disables
/// all line-wrapping.
/// \param ShowColors Enable colorizing of the message.
static void printDiagnosticMessage(raw_ostream &OS,
DiagnosticsEngine::Level Level,
StringRef Message,
unsigned CurrentColumn, unsigned Columns,
bool ShowColors) {
if (ShowColors) {
// Print warnings, errors and fatal errors in bold, no color
switch (Level) {
case DiagnosticsEngine::Warning: OS.changeColor(savedColor, true); break;
case DiagnosticsEngine::Error: OS.changeColor(savedColor, true); break;
case DiagnosticsEngine::Fatal: OS.changeColor(savedColor, true); break;
default: break; //don't bold notes
}
}
if (Columns)
printWordWrapped(OS, Message, Columns, CurrentColumn);
else
OS << Message;
if (ShowColors)
OS.resetColor();
OS << '\n';
}
private:
/// \brief Prints an include stack when appropriate for a particular
/// diagnostic level and location.
@ -1283,9 +1299,10 @@ void TextDiagnosticPrinter::HandleDiagnostic(DiagnosticsEngine::Level Level,
// other infrastructure necessary when emitting more rich diagnostics.
if (!Info.getLocation().isValid()) {
TextDiagnostic::printDiagnosticLevel(OS, Level, DiagOpts->ShowColors);
printDiagnosticMessage(OS, Level, DiagMessageStream.str(),
OS.tell() - StartOfLocationInfo,
DiagOpts->MessageLength, DiagOpts->ShowColors);
TextDiagnostic::printDiagnosticMessage(OS, Level, DiagMessageStream.str(),
OS.tell() - StartOfLocationInfo,
DiagOpts->MessageLength,
DiagOpts->ShowColors);
OS.flush();
return;
}