pub struct Cycles<'g> { /* private fields */ }Expand description
Contains information about dependency cycles in feature graphs.
Cargo permits cycles if at least one of the links is dev-only. Cycles exposes information
about such dependencies.
Constructed through PackageGraph::cycles.
Implementations§
Source§impl<'g> Cycles<'g>
impl<'g> Cycles<'g>
Sourcepub fn is_cyclic<'a>(
&self,
a: impl Into<FeatureId<'a>>,
b: impl Into<FeatureId<'a>>,
) -> Result<bool, Error>
pub fn is_cyclic<'a>( &self, a: impl Into<FeatureId<'a>>, b: impl Into<FeatureId<'a>>, ) -> Result<bool, Error>
Returns true if a and b lie on a common directed cycle in the
feature graph.
“Lie on a common cycle” means: in the same Strongly Connected Component and that SCC is non-trivial.
- For distinct feature IDs, that’s the same as being in a multi-node SCC.
- For the same feature ID, the node must either be in a multi-node SCC,
or have a self-loop edge in the dependency graph (e.g., from a
pathdev-dependency on the package’s own crate).
In particular, is_cyclic(a, a) is not reflexively true: it
returns false for features that aren’t on any cycle.
Sourcepub fn all_cycles(
&self,
) -> impl Iterator<Item = Vec<FeatureId<'g>>> + 'g + use<'g>
pub fn all_cycles( &self, ) -> impl Iterator<Item = Vec<FeatureId<'g>>> + 'g + use<'g>
Returns all the cyclic Strongly Connected Components of this graph: every multi-node SCC, plus every single-node SCC whose feature has a self-loop edge.
Cycles are returned in topological order: if features in cycle B depend on features in cycle A, A is returned before B.
Within a cycle, nodes are returned in non-dev order: if feature Foo has a dependency on Bar, and Bar has a dev-dependency on Foo, then Foo is returned before Bar.
Auto Trait Implementations§
impl<'g> Freeze for Cycles<'g>
impl<'g> RefUnwindSafe for Cycles<'g>
impl<'g> Send for Cycles<'g>
impl<'g> Sync for Cycles<'g>
impl<'g> Unpin for Cycles<'g>
impl<'g> UnsafeUnpin for Cycles<'g>
impl<'g> UnwindSafe for Cycles<'g>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more