[cfe-commits] [Patch] Visually update -ast-dump

Matthieu Monrocq matthieu.monrocq at gmail.com
Thu Aug 30 10:02:42 PDT 2012


On Thu, Aug 30, 2012 at 4:11 AM, Richard Trieu <rtrieu at google.com> wrote:

> For too long, -ast-dump would produce drab, monochromatic, textual AST's.
>  Large walls of text to slough through to find the interesting bits.
>  Worse, if a statement filled more than one line, the structural
> information of the tree would be easily lost amid the type names, source
> locations, pointer address, and statement names.  Fear not, a solution
> presents itself!
>
> 1) The addition of ASCII characters into the unused indents at the
> beginning of lines.  Pipes "|", dashes "-", and backslashes "\" quickly
> show relationships between the different statements.  Find siblings,
> parents, and children fast and easy, never lose your place again.
>
> 2) For each statement, different parts are highlighted with different
> colors.  This visually separates the components and allows faster
> differentiating.  Looking for a specific type?  All types are the same
> color.  Same for the statement names.  And source locations.
>
> 3) But wait, there's more!  Since -ast-dump and dump() use the same
> ASTVisitor, you can also get colors in your debugger!  Just use dumpColor()
> instead of dump() and get colors while you debug.
>
> To use, either use "clang -Xclang -ast-dump" or "clang -cc1 -ast-dump
> -fcolor-diagnostics" from a color-enabled terminal.
>
> Implementation detail:
> Color changes were handled by changeColor() and resetColor() from the
> raw_ostream.  The different colors are stored in constants at the top of
> the class before being used in the relevant visit method.
>
> Tree structure printing was handled by a vector of statuses.  The status
> indicates if there's future children at the level of the index.  This is
> enough information to generate the tree structure.  This replaces the
> integer indent counter.
>
> To determine if color printing is required, the dumper queries the
> DiagnosticEngine in the SourceManager.  This is enough for -ast-dump.
>  However, when debugging and call Stmt.dump(), the Stmt doesn't have a
> SourceManager.  It is possible to call dump() with a SourceManager, but to
> simplify things, a dumpColor() was created to force color printing.
>
> I've attached a patch and an image showing the difference between color
> and no color.  Work in progress, comments welcome.
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
It is amazing how such a little thing as sprinkling colors makes it so much
more accessible.

-- Matthieu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120830/61854043/attachment.html>


More information about the cfe-commits mailing list