diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index a962ea07c5422..3f1bd2b9a3c7f 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 56f0c5e3dd066..6d617d338ed94 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 56f0c5e3dd066..b225c5496e249 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 1293dc8a875df..2ca871cd11ca0 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 1ccf019a7c1bc..ccda6f158eda2 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 5b47c3e24060b..450ea023bcbe6 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 f1064a6290561..9ec92e6dbfabc 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 1bd3efeadcbba..fc69c34c1183b 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; +}