]> git.lizzy.rs Git - rust.git/commitdiff
Better error message for certain classes of unresolved imports
authorCorey Richardson <corey@octayn.net>
Thu, 9 May 2013 01:47:34 +0000 (21:47 -0400)
committerCorey Richardson <corey@octayn.net>
Thu, 9 May 2013 20:08:53 +0000 (16:08 -0400)
src/librustc/middle/resolve.rs

index ff002afd028f52b208f49c444dcbcf5d499e5eae..26dad202ab32c0a72f3a2e902f2847b593696e84 100644 (file)
@@ -64,7 +64,7 @@
 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 @@ fn resolve_module_path_from_root(@mut self,
                                               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;
                 }