-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Identify cycles between imports #18
Comments
Thanks, @withoutboats! I too would love to have cargo modules provide such a feature. How would you expect such a hypothetical command Something like this?
|
I have no idea! :) |
FWIW, if you have a dot graph with cycles in, and you just want to pick out the cycles from it, that's what |
@smoelius perhaps you can shed light on this? I'm not clear whether I arrived here because I would like to identify cycles between module imports in my project (at least the obvious ones, in light of the point made in #185). Trying the % cargo modules dependencies --acyclic --lib
Error: Circular dependency between `sift::handle_key_event::Action` and `sift::handle_key_event::Action::eq`.
┌> sift::handle_key_event::Action
│ └─> sift::handle_key_event::Action::eq
└──────┘ This telling me about a Exploring this further I try eliminating certain things from the graph, with the idea of having only the module imports remaining, and I get a more interesting case: % cargo modules dependencies --acyclic --lib --no-fns --no-traits --no-sysroot
Error: Circular dependency between `sift::ui_state::State` and `sift::ui_state::State::new`.
┌> sift::ui_state::State
│ └─> sift::ui_state::State::new
└──────┘ ...in this case Also, |
My preference would be that such a case not be reported. The same would be true for the
If memory serves me right, that behavior was intended.
I am afraid I don't have any more I could add that would be of value. |
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.
The text was updated successfully, but these errors were encountered: