From 1400c0cc3bdd7f685d63fe174286dd106337e735 Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Tue, 1 Apr 2025 17:15:31 +1300 Subject: Report all symbols involved in a cyclic dependency error Without this, it's difficult to sort out a cyclic dependency error when many large source files are involved. --- src/errors/merge_error.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/errors') diff --git a/src/errors/merge_error.rs b/src/errors/merge_error.rs index d830d96..89f55a2 100644 --- a/src/errors/merge_error.rs +++ b/src/errors/merge_error.rs @@ -3,6 +3,8 @@ use crate::*; use ansi::*; use log::error; +use std::collections::HashSet; + pub struct MergeError<'a> { pub resolver: &'a Resolver, @@ -33,6 +35,18 @@ impl MergeError<'_> { None => eprintln!(" => {parent_path}"), }; + // Report all referenced symbols that are defined by this parent. + let mut reported_definition_ids = HashSet::new(); + for reference in &self.resolver.resolved { + if reference.tracked.source_id == *id { + if reported_definition_ids.insert(reference.definition) { + let definition = &self.resolver.definitions[reference.definition]; + if definition.tracked.source_id == *parent_id { + eprintln!(" {:?}", definition.tracked.symbol); + } + } + } + } } } } -- cgit v1.2.3-70-g09d2