about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-04-09 01:06:57 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-04-09 02:12:15 +0000
commit2944fab398155e65bd79f84f05b68195f7ca3e82 (patch)
tree0b260358c2b84a414c95042c4b155db7430a8185
parent7979dd6089ee5cba39cfbe6e880a3edeb7fff788 (diff)
downloadrust-2944fab398155e65bd79f84f05b68195f7ca3e82.tar.gz
rust-2944fab398155e65bd79f84f05b68195f7ca3e82.zip
Improve import resolution diagnostics
-rw-r--r--src/librustc_resolve/resolve_imports.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs
index 738a99fbe92..f0e834d4303 100644
--- a/src/librustc_resolve/resolve_imports.rs
+++ b/src/librustc_resolve/resolve_imports.rs
@@ -539,6 +539,7 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
             (&Failed(_), &Failed(_)) => {
                 let resolutions = target_module.resolutions.borrow();
                 let names = resolutions.iter().filter_map(|(&(ref name, _), resolution)| {
+                    if *name == source { return None; } // Never suggest the same name
                     match *resolution.borrow() {
                         NameResolution { binding: Some(_), .. } => Some(name),
                         NameResolution { single_imports: SingleImports::None, .. } => None,
@@ -549,9 +550,12 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
                     Some(name) => format!(". Did you mean to use `{}`?", name),
                     None => "".to_owned(),
                 };
-                let msg = format!("There is no `{}` in `{}`{}",
-                                  source,
-                                  module_to_string(target_module), lev_suggestion);
+                let module_str = module_to_string(target_module);
+                let msg = if &module_str == "???" {
+                    format!("There is no `{}` in the crate root{}", source, lev_suggestion)
+                } else {
+                    format!("There is no `{}` in `{}`{}", source, module_str, lev_suggestion)
+                };
                 return Failed(Some((directive.span, msg)));
             }
             _ => (),