Hi all,
We’re thinking about building a web-based source code cross reference
tool based on libclang, which uses type information, call graphs,
etc. So before we start writing this tool, I wanted to ask you guys
if you know of any such tool which is already available. I have not
been able to find one, but I’m sure that you guys should know about it
if one exists.
Hi Ehsan,
Hi Stefan,
I have been working on Synopsis (http://synopsis.fresco.org), which
started as a source code documentation tool (similar to doxygen), but
with many more features. In particular, at some point we introduced an
“SXR” mode (akin to LXR: http://lxr.linux.no). In contrast to LXR,
however, Synopsis / SXR will use actual type and symbol information for
the cross-referencing, so instead of just looking up via text matching,
Synopsis supports C++ symbol lookup.
I have been working on a new version of Synopsis that uses libclang as
its CPP/C/C++ parser, and hope to be able to announce a first version
with that new frontend soon after an LLVM version is released that
contains all the required bug fixes and feature additions to CLang that
Synopsis depends on. (I’m right now working off LLVM trunk.)
I’d be happy to discuss details concerning what features you are
interested in, to see how much of it is already supported, and how hard
it is to implement the remainder.
I had actually looked at Synopsis (not the libclang-based version, of course), but looking at the web site, it seemed to me that the project is not maintained any more. I’m happy to hear that is not the case.
It would be really interesting for us to see your tool. It’s OK that you’re working off of LLVM/clang trunk, that’s where we are too!
In terms of features, what I think we would need is a class library, a global function library, call graphs (list of callers, callees), type information (what’s the type of this variable), macro expansion information (what does the compiler see here?), macro instantiation sites (where in the code is this macro used?), inheritance information, and maybe some other things which I’m forgetting.
There’s this tool called dxr that some of the folks here at Mozilla have built on top of Dehydra/gcc <http://dxr.mozilla.org/>, but unfortunately it has a lot of rough edges, not enough documentation (or even people who can guide others through getting started), and it’s Mozilla specific. What we have in mind is replacing it with a tool which is better maintained, and is more fit towards the needs of other projects besides Mozilla as well.
I would love to contribute to SXR if we have the same general picture in our heads.
PS: Unfortunately the Synopsis website is partly broken right now, since
the old server was replaced and I haven’t managed to set up and adjust
all the services yet that it relies on.
Yes, this is very unfortunate. I think it would be a really good idea to add a note to the main page saying just that, so that others looking at it don’t get the impression that the project is dead.
Cheers,