diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-04-09 01:06:57 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-04-09 02:12:15 +0000 |
| commit | 2944fab398155e65bd79f84f05b68195f7ca3e82 (patch) | |
| tree | 0b260358c2b84a414c95042c4b155db7430a8185 | |
| parent | 7979dd6089ee5cba39cfbe6e880a3edeb7fff788 (diff) | |
| download | rust-2944fab398155e65bd79f84f05b68195f7ca3e82.tar.gz rust-2944fab398155e65bd79f84f05b68195f7ca3e82.zip | |
Improve import resolution diagnostics
| -rw-r--r-- | src/librustc_resolve/resolve_imports.rs | 10 |
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))); } _ => (), |
