about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCorey Richardson <corey@octayn.net>2013-05-08 21:47:34 -0400
committerCorey Richardson <corey@octayn.net>2013-05-09 16:08:53 -0400
commitd3ca9c61a0685c5add1ce2115402dfc3e2f48912 (patch)
tree1093e685f83afc0bdedda9e252aba1ae39a68ce4
parentd82d9874a6f88e0afa021796e9efaba5b3670c31 (diff)
downloadrust-d3ca9c61a0685c5add1ce2115402dfc3e2f48912.tar.gz
rust-d3ca9c61a0685c5add1ce2115402dfc3e2f48912.zip
Better error message for certain classes of unresolved imports
-rw-r--r--src/librustc/middle/resolve.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs
index ff002afd028..26dad202ab3 100644
--- a/src/librustc/middle/resolve.rs
+++ b/src/librustc/middle/resolve.rs
@@ -64,7 +64,7 @@ use syntax::attr::{attr_metas, contains_name, attrs_contains_name};
 use syntax::parse::token::ident_interner;
 use syntax::parse::token::special_idents;
 use syntax::print::pprust::path_to_str;
-use syntax::codemap::{span, dummy_sp};
+use syntax::codemap::{span, dummy_sp, BytePos};
 use syntax::visit::{default_visitor, mk_vt, Visitor, visit_block};
 use syntax::visit::{visit_crate, visit_expr, visit_expr_opt};
 use syntax::visit::{visit_foreign_item, visit_item};
@@ -2482,6 +2482,16 @@ pub impl Resolver {
                                               TypeNS,
                                               name_search_type) {
                 Failed => {
+                    let segment_name = self.session.str_of(name);
+                    let module_name = self.module_to_str(search_module);
+                    if module_name == ~"???" {
+                        self.session.span_err(span {lo: span.lo, hi: span.lo +
+                                              BytePos(str::len(*segment_name)), expn_info:
+                                              span.expn_info}, fmt!("unresolved import.  perhaps \
+                                                                    you forgot an 'extern mod %s'?",
+                                                                    *segment_name));
+                        return Failed;
+                    }
                     self.session.span_err(span, ~"unresolved name");
                     return Failed;
                 }