Viewing clang ASTs

In my ongoing attempt to use clang as a source of information to build DXR output, I have often found that the online documentation for most of the stuff, well, sucks. The biggest pain point is that the doxygen just completely fails to figure out what I can visit using RecursiveASTVisitor, and, on top of it, manages to not think that DeclCXX.h contains anything documentable. I've gotten around these bugs by hosting an index of clang on DXR (<http://dxr.mozilla.org/clang/>), but that still leaves me in the lurch if I'm trying to understand why one line mysteriously fails to produce the correct output even when the previous line is correct.

My solution for this was to put a simple web frontend around a tool which just dumps the TranslationUnit in a JSON-ish format. For lack of better naming, I've called it "viewsource", and you can find a version at <http://dxr.mozilla.org/viewsource/>. The source code is located on github at <https://github.com/jcranmer/viewsource/> if you want to look at it. It's nowhere near complete--I've only managed to dump out Decl statements as well as TypeLoc (though that's not in the online version yet), although I hope to handle Types, Stmts, and Exprs before long. The tool works by building up the information into something akin to a JS object tree internally and then dumps it out, with hooks to handle cycles a bit more gracefully than infinitely looping; with some tweaks, this same basic format could probably be used to build bindings for $DYNAMIC_LANGUAGE to allow people to write compiler plugins in languages other than C++.

I apologize for the crappy UI, but polishing web UI is a low priority for me right now. Incidentally, the tool also has support for displaying equivalent Dehydra information for gcc as well as dumping the parse tree (according to Mozilla's implementation) for JavaScript source code.

Incidentally, I'd also like to ask if there is the potential for an easier way to represent AST node metadata than reading off all of the method names and hoping that everyone uses the same naming convention (I have to special case a few people who don't follow the same convention).