cargo-modules icon indicating copy to clipboard operation
cargo-modules copied to clipboard

Identify cycles between imports

Open withoutboats opened this issue 6 years ago • 3 comments

As a rule, I try to organize my code so that the relationships between modules are acyclic - if I import something from module a into module b, I don't import anything from module b into module a.

Since this can construct the graph of import relationships between modules, it would be great for it to have a way to identify cycles in that graph, to help find the parts of your program that are getting "spaghetti."

Alternatively, though, I suspect there's already a common utility that can identify cycles in dot graph data (though I don't know what it is), and possibly just documenting and recommending you pipe the data into that could be a good solution.

withoutboats avatar May 18 '18 20:05 withoutboats

Thanks, @withoutboats!

I too would love to have cargo modules provide such a feature.

How would you expect such a hypothetical command cargo modules cycles to present detected cycles?

Something like this?

Error: Circular dependency between `foo` and `foo::bar::baz::blee`.

┌> foo
│  └─> foo::bar
│      └─> foo::bar::baz
│          └─> foo::bar::baz::blee
└─────────────┘

regexident avatar May 24 '18 07:05 regexident

I have no idea! :)

withoutboats avatar May 24 '18 22:05 withoutboats

FWIW, if you have a dot graph with cycles in, and you just want to pick out the cycles from it, that's what sccmap is for. You give it a dot file as input, and its output is a reduced dot file that contains only those nodes and edges which participate in cycles.

pdh11 avatar May 02 '23 17:05 pdh11