[x] The feature / improvement you are suggesting overlaps with the purpose of gomod:
facilitating the management of Go modules and their dependencies.
[x] You have examined various alternatives to the new feature / improvement you are suggesting
and are describing the results in the description below.
[x] You have filled in the three sections below and deleted their corresponding placeholders
texts.
Description
On modules with a large total number of dependencies (>80 / 100) the graphs generated by the GraphViz toolchain are of relative poor quality and legibility. This is appears to be mostly due to the manner in which the various nodes of the graph are placed and constraints on these placements that are used.
This can be observed with:
gomods own dependency graph which works relatively well and has ~40 dependencies total.
The graph for the matterbridge project has already a much larger size with ~175 dependencies is becoming somewhat unwieldy.
Most importantly the output of the dot tool for larger graphs appears to leave quite some empty space available and node placement is not always at its most advantageous for edge routing. This is likely due to the generalist nature of the dot whereas it would be possible the leverage some of the specific knowledge we have about dependency graphs to achieve a better overall result.
Implementation suggestions
Building a placement and edge-routing engine from scratch can be painful, difficult and is above all quite an undertaking... but it might be worth it. Prototyping is going to be crucial in order to decide what is the best way forward.
One way this could be improved is with an option to exclude transitive dependencies. I think those edges lose their value in large graphs and add a lot of noise.
Feature request
Checklist
gomod
: facilitating the management of Go modules and their dependencies.Description
On modules with a large total number of dependencies (>80 / 100) the graphs generated by the GraphViz toolchain are of relative poor quality and legibility. This is appears to be mostly due to the manner in which the various nodes of the graph are placed and constraints on these placements that are used.
This can be observed with:
gomod
s own dependency graph which works relatively well and has ~40 dependencies total.Most importantly the output of the
dot
tool for larger graphs appears to leave quite some empty space available and node placement is not always at its most advantageous for edge routing. This is likely due to the generalist nature of thedot
whereas it would be possible the leverage some of the specific knowledge we have about dependency graphs to achieve a better overall result.Implementation suggestions
Building a placement and edge-routing engine from scratch can be painful, difficult and is above all quite an undertaking... but it might be worth it. Prototyping is going to be crucial in order to decide what is the best way forward.
Additional information
N.A.