use crate::*; use ansi::*; use log::error; pub struct MergeError<'a> { pub resolver: &'a Resolver, /// A list of source units involved in a cycle. pub cyclic_unit_ids: Vec, } impl MergeError<'_> { pub fn report(&self) { error!("A cyclic dependency was found between the following libraries:"); for id in &self.cyclic_unit_ids { let unit = &self.resolver.source_units[*id]; let path = &unit.source_unit.path(); match unit.source_unit.name() { Some(name) => eprintln!("{name}{NORMAL}{DIM} ({path}){NORMAL}"), None => eprintln!("{path}"), }; // Print each parent involved in the dependency cycle. for parent_id in &unit.parent_ids { if !self.cyclic_unit_ids.contains(parent_id) { continue; } let parent_unit = &self.resolver.source_units[*parent_id]; let parent_path = &parent_unit.source_unit.path(); match parent_unit.source_unit.name() { Some(parent_name) => eprintln!(" => {parent_name} {DIM}({parent_path}){NORMAL}"), None => eprintln!(" => {parent_path}"), }; } } } }