about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-05-15 05:43:58 -0700
committerbors <bors@rust-lang.org>2013-05-15 05:43:58 -0700
commit62c7027a3258b60cbad3e99f4c7cb8d58f59fbd5 (patch)
tree299c25aec17c76b9ee8e07ac20e921d70a7f51d5
parent4e4f90d4a0b887c45d1ced359657fbdb23ab2438 (diff)
parent68863153bba3ab994978b49216cb58641e7a9fbb (diff)
downloadrust-62c7027a3258b60cbad3e99f4c7cb8d58f59fbd5.tar.gz
rust-62c7027a3258b60cbad3e99f4c7cb8d58f59fbd5.zip
auto merge of #6485 : cmr/rust/local_rename_import_error, r=catamorphism
-rw-r--r--src/librustc/middle/resolve.rs31
-rw-r--r--src/test/compile-fail/issue-2123.rs1
-rw-r--r--src/test/compile-fail/issue-2937.rs1
-rw-r--r--src/test/compile-fail/issue-3993-2.rs1
-rw-r--r--src/test/compile-fail/issue-3993-3.rs1
-rw-r--r--src/test/compile-fail/issue-3993.rs1
-rw-r--r--src/test/compile-fail/super-at-top-level.rs3
-rw-r--r--src/test/compile-fail/unresolved-import.rs10
8 files changed, 36 insertions, 13 deletions
diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs
index 91f565bcae6..9532cf327cb 100644
--- a/src/librustc/middle/resolve.rs
+++ b/src/librustc/middle/resolve.rs
@@ -2058,7 +2058,8 @@ pub impl Resolver {
                             self.resolve_single_import(module_,
                                                        containing_module,
                                                        target,
-                                                       source);
+                                                       source,
+                                                       import_directive.span);
                     }
                     GlobImport => {
                         let span = import_directive.span;
@@ -2121,7 +2122,8 @@ pub impl Resolver {
                              module_: @mut Module,
                              containing_module: @mut Module,
                              target: ident,
-                             source: ident)
+                             source: ident,
+                             span: span)
                           -> ResolveResult<()> {
         debug!("(resolving single import) resolving `%s` = `%s::%s` from \
                 `%s`",
@@ -2325,14 +2327,14 @@ pub impl Resolver {
         }
 
         if resolve_fail {
-            self.session.err(fmt!("unresolved import: there is no `%s` in `%s`",
-                                  *self.session.str_of(source),
-                                  self.module_to_str(containing_module)));
+            self.session.span_err(span, fmt!("unresolved import: there is no `%s` in `%s`",
+                                             *self.session.str_of(source),
+                                             self.module_to_str(containing_module)));
             return Failed;
         } else if priv_fail {
-            self.session.err(fmt!("unresolved import: found `%s` in `%s` but it is private",
-                                  *self.session.str_of(source),
-                                  self.module_to_str(containing_module)));
+            self.session.span_err(span, fmt!("unresolved import: found `%s` in `%s` but it is \
+                                             private", *self.session.str_of(source),
+                                             self.module_to_str(containing_module)));
             return Failed;
         }
 
@@ -2593,7 +2595,18 @@ pub impl Resolver {
         let start_index;
         match module_prefix_result {
             Failed => {
-                self.session.span_err(span, ~"unresolved name");
+                let mpath = self.idents_to_str(module_path);
+                match str::rfind(self.idents_to_str(module_path), |c| { c == ':' }) {
+                    Some(idx) => {
+                        self.session.span_err(span, fmt!("unresolved import: could not find `%s` \
+                                                         in `%s`", str::substr(mpath, idx,
+                                                                               mpath.len() - idx),
+                                                         // idx - 1 to account for the extra
+                                                         // colon
+                                                         str::substr(mpath, 0, idx - 1)));
+                    },
+                    None => (),
+                };
                 return Failed;
             }
             Indeterminate => {
diff --git a/src/test/compile-fail/issue-2123.rs b/src/test/compile-fail/issue-2123.rs
index 56f0c5e3dd0..6d617d338ed 100644
--- a/src/test/compile-fail/issue-2123.rs
+++ b/src/test/compile-fail/issue-2123.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 use x = m::f; //~ ERROR failed to resolve import
+              //~^ unresolved import: there is no `f` in `m`
 
 mod m {
 }
diff --git a/src/test/compile-fail/issue-2937.rs b/src/test/compile-fail/issue-2937.rs
index 56f0c5e3dd0..b225c5496e2 100644
--- a/src/test/compile-fail/issue-2937.rs
+++ b/src/test/compile-fail/issue-2937.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 use x = m::f; //~ ERROR failed to resolve import
+              //~^ ERROR unresolved import: there is no `f` in `m`
 
 mod m {
 }
diff --git a/src/test/compile-fail/issue-3993-2.rs b/src/test/compile-fail/issue-3993-2.rs
index 1293dc8a875..2ca871cd11c 100644
--- a/src/test/compile-fail/issue-3993-2.rs
+++ b/src/test/compile-fail/issue-3993-2.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 use zoo::{duck, goose}; //~ ERROR failed to resolve import
+                        //~^ ERROR unresolved import: found `goose` in `zoo` but it is private
 
 mod zoo {
     pub enum bird {
diff --git a/src/test/compile-fail/issue-3993-3.rs b/src/test/compile-fail/issue-3993-3.rs
index 1ccf019a7c1..ccda6f158ed 100644
--- a/src/test/compile-fail/issue-3993-3.rs
+++ b/src/test/compile-fail/issue-3993-3.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 use zoo::fly; //~ ERROR failed to resolve import
+              //~^ ERROR unresolved import: found `fly` in `zoo` but it is private
 
 mod zoo {
     priv type fly = ();
diff --git a/src/test/compile-fail/issue-3993.rs b/src/test/compile-fail/issue-3993.rs
index 5b47c3e2406..450ea023bcb 100644
--- a/src/test/compile-fail/issue-3993.rs
+++ b/src/test/compile-fail/issue-3993.rs
@@ -9,6 +9,7 @@
 // except according to those terms.
 
 use zoo::fly; //~ ERROR failed to resolve import
+              //~^ ERROR unresolved import: found `fly` in `zoo` but it is private
 
 mod zoo {
     priv fn fly() {}
diff --git a/src/test/compile-fail/super-at-top-level.rs b/src/test/compile-fail/super-at-top-level.rs
index f1064a62905..9ec92e6dbfa 100644
--- a/src/test/compile-fail/super-at-top-level.rs
+++ b/src/test/compile-fail/super-at-top-level.rs
@@ -1,5 +1,4 @@
-use super::f;   //~ ERROR unresolved name
-//~^ ERROR failed to resolve import
+use super::f; //~ ERROR failed to resolve import
 
 fn main() {
 }
diff --git a/src/test/compile-fail/unresolved-import.rs b/src/test/compile-fail/unresolved-import.rs
index 1bd3efeadcb..fc69c34c118 100644
--- a/src/test/compile-fail/unresolved-import.rs
+++ b/src/test/compile-fail/unresolved-import.rs
@@ -8,5 +8,11 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-use foo::bar; //~ ERROR unresolved import. maybe a missing
-              //~^ ERROR failed to resolve import
+use foo::bar; //~ ERROR unresolved import. maybe a missing `extern mod foo`?
+              //~^ ERROR failed to resolve import `foo::bar`
+use x = bar::baz; //~ ERROR unresolved import: there is no `baz` in `bar`
+                  //~^ ERROR failed to resolve import `bar::baz`
+
+mod bar {
+    struct bar;
+}