Class Hierarchy Graphs

w0rp via Digitalmars-d digitalmars-d at puremagic.com
Sun Mar 29 04:24:19 PDT 2015


I just added a module dependency graph generator by following a 
similar process to the library which I used for class 
hierarchies. I'd be willing to bet that Andrei wants to apply it 
to Phobos, and that is indeed a thing that can be done.

There's an example on GitHub, and the readme explains how to run 
it. The example outputs... this. (Try not to scream.)

https://i.imgur.com/Af4RKuc.png

So like you might expect for Phobos. Everything importing 
everything else, just about. I have a few comments on this.

The library just gives you the DOT file as output, not the image. 
Graphviz probably lets you pick different strategies for how a 
graph should be drawn. Drawing a graph is really complicated, so 
it's best to leave that to Graphviz. I believe you can specify 
drawing co-ordinates for vertices in a DOT file. In any case, how 
the graph is drawn in the end is a probably a user decision.

Like the previous class example, you can filter out modules from 
the output with a regular expression. You will probably have to 
do this to get sensible output, as you might not care which 
standard library modules you're depending on, or you might care, 
but not for a few modules in particular, etc.

The filters and the methods can be combined to only look at 
particular sets of modules at a time, so you can generate graphs 
for only a subset of Phobos, etc. This might help in making the 
imports look more like a binary tree.

Back on the class hierarchies. I hit a bit of a snag with that. I 
have been using ModuleInfo and ClassInfo to generate the 
diagrams, but ClassInfo is a runtime feature which has no 
knowledge of method or attribute names. So I might have to use 
compile time reflection all the way for that. So in short, I 
haven't thought of a good way to get method and attribute names 
into the output yet.

As an aside, ModuleInfo has been undocumented forever, as far as 
I can tell. Would it be possible to get some documentation for 
ModuleInfo up on the site? I've been figuring out how to use it 
just by reading object_.d. If it was documented, someone else 
would have probably written this stuff I'm writing by now 
already, because it's really simple code.


More information about the Digitalmars-d mailing list