I want this. A thing that let's you visualize how the routines in your program are interconnected and how complex your routines are.
In particular...
* Lines pointing from the current routine to other routines it uses.
* Lines pointing into the current routine from other routines which use it.
* Lines connecting any global (which includes lexicals scoped outside a routine) your touine uses to all other uses of the global to show just how they interconnect (and toss encapsulation out the window).
* A visualization, either with color or length, of the length of each routine.
* A visualization of how deeply nested a routine gets.
Those last two, in particular, are really good, cheap indications of complexity.
I got the idea in an interesting article about Software Archeology.* Structure *
;;;';;;;;;;{;";}{;;;;{}"";{}"";";}{;;;';';";;;{;'";;';;;
};';}S{;";"";;}S{;' {}{"};;;}S{;;;;";";;};
Many years ago I was having trouble remembering how my code interacted with itself, so wrote this. It produces a text report of what subroutines call what subroutines, and what subroutines are called by what subroutines.
The code is hideous, and I wouldn't dream of writing it that way now, but on the other hand it does mostly work, and might make a good starting point. If anyone wants to have a go at improving it, be my guest.