summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorJonas Schievink <jonas@schievink.net>2015-09-14 16:09:57 +0200
committerJonas Schievink <jonas@schievink.net>2015-09-14 16:09:57 +0200
commit0be755c24a81f3c7c07dcd50406c9f17bee0d6ac (patch)
treecfb2e53b8036abf4e0d8ca5c4ccd951254f6eba9 /src/libsyntax
parentf3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0 (diff)
downloadrust-0be755c24a81f3c7c07dcd50406c9f17bee0d6ac.tar.gz
rust-0be755c24a81f3c7c07dcd50406c9f17bee0d6ac.zip
Print the file in which a macro was defined
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/diagnostic.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs
index c78086bda64..c177eb1f00b 100644
--- a/src/libsyntax/diagnostic.rs
+++ b/src/libsyntax/diagnostic.rs
@@ -742,11 +742,20 @@ impl EmitterWriter {
                         // Don't print recursive invocations
                         if ei.call_site != last_span {
                             last_span = ei.call_site;
-                            try!(self.print_diagnostic(&cm.span_to_string(ei.call_site), Note,
-                                                       &format!("in this expansion of {}{}{}",
-                                                                pre,
-                                                                ei.callee.name(),
-                                                                post),
+
+                            let mut diag_string = format!("in this expansion of {}{}{}",
+                                                          pre,
+                                                          ei.callee.name(),
+                                                          post);
+
+                            if let Some(def_site_span) = ei.callee.span {
+                                diag_string.push_str(&format!(" (defined in {})",
+                                                              cm.span_to_filename(def_site_span)));
+                            }
+
+                            try!(self.print_diagnostic(&cm.span_to_string(ei.call_site),
+                                                       Note,
+                                                       &diag_string,
                                                        None));
                         }
                         Ok(Some(ei.call_site))