From 1400c0cc3bdd7f685d63fe174286dd106337e735 Mon Sep 17 00:00:00 2001
From: Ben Bridle <ben@derelict.engineering>
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/merge_error.rs')

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