mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-13 21:54:42 +00:00
minor: Downgrade cyclic deps error to warning
This commit is contained in:
parent
8d1d5cdfc1
commit
2e2f798a74
2 changed files with 8 additions and 48 deletions
|
@ -374,37 +374,6 @@ impl CrateGraph {
|
||||||
self.arena.alloc(data)
|
self.arena.alloc(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Remove the crate from crate graph. If any crates depend on this crate, the dependency would be replaced
|
|
||||||
/// with the second input.
|
|
||||||
pub fn remove_and_replace(
|
|
||||||
&mut self,
|
|
||||||
id: CrateId,
|
|
||||||
replace_with: CrateId,
|
|
||||||
) -> Result<(), CyclicDependenciesError> {
|
|
||||||
for (x, data) in self.arena.iter() {
|
|
||||||
if x == id {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for edge in &data.dependencies {
|
|
||||||
if edge.crate_id == id {
|
|
||||||
self.check_cycle_after_dependency(edge.crate_id, replace_with)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// if everything was ok, start to replace
|
|
||||||
for (x, data) in self.arena.iter_mut() {
|
|
||||||
if x == id {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for edge in &mut data.dependencies {
|
|
||||||
if edge.crate_id == id {
|
|
||||||
edge.crate_id = replace_with;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn add_dep(
|
pub fn add_dep(
|
||||||
&mut self,
|
&mut self,
|
||||||
from: CrateId,
|
from: CrateId,
|
||||||
|
@ -412,26 +381,17 @@ impl CrateGraph {
|
||||||
) -> Result<(), CyclicDependenciesError> {
|
) -> Result<(), CyclicDependenciesError> {
|
||||||
let _p = tracing::info_span!("add_dep").entered();
|
let _p = tracing::info_span!("add_dep").entered();
|
||||||
|
|
||||||
self.check_cycle_after_dependency(from, dep.crate_id)?;
|
// Check if adding a dep from `from` to `to` creates a cycle. To figure
|
||||||
|
// that out, look for a path in the *opposite* direction, from `to` to
|
||||||
self.arena[from].add_dep(dep);
|
// `from`.
|
||||||
Ok(())
|
if let Some(path) = self.find_path(&mut FxHashSet::default(), dep.crate_id, from) {
|
||||||
}
|
|
||||||
|
|
||||||
/// Check if adding a dep from `from` to `to` creates a cycle. To figure
|
|
||||||
/// that out, look for a path in the *opposite* direction, from `to` to
|
|
||||||
/// `from`.
|
|
||||||
fn check_cycle_after_dependency(
|
|
||||||
&self,
|
|
||||||
from: CrateId,
|
|
||||||
to: CrateId,
|
|
||||||
) -> Result<(), CyclicDependenciesError> {
|
|
||||||
if let Some(path) = self.find_path(&mut FxHashSet::default(), to, from) {
|
|
||||||
let path = path.into_iter().map(|it| (it, self[it].display_name.clone())).collect();
|
let path = path.into_iter().map(|it| (it, self[it].display_name.clone())).collect();
|
||||||
let err = CyclicDependenciesError { path };
|
let err = CyclicDependenciesError { path };
|
||||||
assert!(err.from().0 == from && err.to().0 == to);
|
assert!(err.from().0 == from && err.to().0 == dep.crate_id);
|
||||||
return Err(err);
|
return Err(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.arena[from].add_dep(dep);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1554,6 +1554,6 @@ fn add_proc_macro_dep(crate_graph: &mut CrateGraph, from: CrateId, to: CrateId,
|
||||||
|
|
||||||
fn add_dep_inner(graph: &mut CrateGraph, from: CrateId, dep: Dependency) {
|
fn add_dep_inner(graph: &mut CrateGraph, from: CrateId, dep: Dependency) {
|
||||||
if let Err(err) = graph.add_dep(from, dep) {
|
if let Err(err) = graph.add_dep(from, dep) {
|
||||||
tracing::error!("{}", err)
|
tracing::warn!("{}", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue