[llvm-commits] [llvm] r155035 - in /llvm/trunk: include/llvm/Support/SourceMgr.h lib/Support/SourceMgr.cpp

Jim Grosbach grosbach at apple.com
Wed Apr 18 12:10:33 PDT 2012


Cool!

On Apr 18, 2012, at 12:04 PM, Benjamin Kramer wrote:

> Author: d0k
> Date: Wed Apr 18 14:04:15 2012
> New Revision: 155035
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=155035&view=rev
> Log:
> SourceMgr: Colorize diagnostics.
> 
> Same color scheme as clang uses. The colors are only enabled if the output is a tty.
> 
> Modified:
>    llvm/trunk/include/llvm/Support/SourceMgr.h
>    llvm/trunk/lib/Support/SourceMgr.cpp
> 
> Modified: llvm/trunk/include/llvm/Support/SourceMgr.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/SourceMgr.h?rev=155035&r1=155034&r2=155035&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/SourceMgr.h (original)
> +++ llvm/trunk/include/llvm/Support/SourceMgr.h Wed Apr 18 14:04:15 2012
> @@ -128,8 +128,11 @@
>   /// PrintMessage - Emit a message about the specified location with the
>   /// specified string.
>   ///
> +  /// @param ShowColors - Display colored messages if output is a terminal and
> +  /// the default error handler is used.
>   void PrintMessage(SMLoc Loc, DiagKind Kind, const Twine &Msg,
> -                    ArrayRef<SMRange> Ranges = ArrayRef<SMRange>()) const;
> +                    ArrayRef<SMRange> Ranges = ArrayRef<SMRange>(),
> +                    bool ShowColors = true) const;
> 
> 
>   /// GetMessage - Return an SMDiagnostic at the specified location with the
> @@ -188,7 +191,7 @@
>   const std::vector<std::pair<unsigned, unsigned> > &getRanges() const {
>     return Ranges;
>   }
> -  void print(const char *ProgName, raw_ostream &S) const;
> +  void print(const char *ProgName, raw_ostream &S, bool ShowColors = true) const;
> };
> 
> }  // end llvm namespace
> 
> Modified: llvm/trunk/lib/Support/SourceMgr.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/SourceMgr.cpp?rev=155035&r1=155034&r2=155035&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Support/SourceMgr.cpp (original)
> +++ llvm/trunk/lib/Support/SourceMgr.cpp Wed Apr 18 14:04:15 2012
> @@ -193,7 +193,8 @@
> }
> 
> void SourceMgr::PrintMessage(SMLoc Loc, SourceMgr::DiagKind Kind,
> -                             const Twine &Msg, ArrayRef<SMRange> Ranges) const {
> +                             const Twine &Msg, ArrayRef<SMRange> Ranges,
> +                             bool ShowColors) const {
>   SMDiagnostic Diagnostic = GetMessage(Loc, Kind, Msg, Ranges);
> 
>   // Report the message with the diagnostic handler if present.
> @@ -208,7 +209,7 @@
>   assert(CurBuf != -1 && "Invalid or unspecified location!");
>   PrintIncludeStack(getBufferInfo(CurBuf).IncludeLoc, OS);
> 
> -  Diagnostic.print(0, OS);
> +  Diagnostic.print(0, OS, ShowColors);
> }
> 
> //===----------------------------------------------------------------------===//
> @@ -225,7 +226,14 @@
> }
> 
> 
> -void SMDiagnostic::print(const char *ProgName, raw_ostream &S) const {
> +void SMDiagnostic::print(const char *ProgName, raw_ostream &S,
> +                         bool ShowColors) const {
> +  // Display colors only if OS goes to a tty.
> +  ShowColors &= S.is_displayed();
> +
> +  if (ShowColors)
> +    S.changeColor(raw_ostream::SAVEDCOLOR, true);
> +
>   if (ProgName && ProgName[0])
>     S << ProgName << ": ";
> 
> @@ -244,13 +252,33 @@
>   }
> 
>   switch (Kind) {
> -  case SourceMgr::DK_Error: S << "error: "; break;
> -  case SourceMgr::DK_Warning: S << "warning: "; break;
> -  case SourceMgr::DK_Note: S << "note: "; break;
> +  case SourceMgr::DK_Error:
> +    if (ShowColors)
> +      S.changeColor(raw_ostream::RED, true);
> +    S << "error: ";
> +    break;
> +  case SourceMgr::DK_Warning:
> +    if (ShowColors)
> +      S.changeColor(raw_ostream::MAGENTA, true);
> +    S << "warning: ";
> +    break;
> +  case SourceMgr::DK_Note:
> +    if (ShowColors)
> +      S.changeColor(raw_ostream::BLACK, true);
> +    S << "note: ";
> +    break;
> +  }
> +
> +  if (ShowColors) {
> +    S.resetColor();
> +    S.changeColor(raw_ostream::SAVEDCOLOR, true);
>   }
> -  
> +
>   S << Message << '\n';
> 
> +  if (ShowColors)
> +    S.resetColor();
> +
>   if (LineNo == -1 || ColumnNo == -1)
>     return;
> 
> @@ -292,6 +320,9 @@
>   }
>   S << '\n';
> 
> +  if (ShowColors)
> +    S.changeColor(raw_ostream::GREEN, true);
> +
>   // Print out the caret line, matching tabs in the source line.
>   for (unsigned i = 0, e = CaretLine.size(), OutCol = 0; i != e; ++i) {
>     if (i >= LineContents.size() || LineContents[i] != '\t') {
> @@ -306,6 +337,9 @@
>       ++OutCol;
>     } while (OutCol & 7);
>   }
> +
> +  if (ShowColors)
> +    S.resetColor();
> 
>   S << '\n';
> }
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list