diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-12-08 04:19:29 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-12-08 04:19:29 +0300 |
| commit | 2010b4f60b6fd2d3b54e7aeef329bcb7f92aec76 (patch) | |
| tree | 4464f24c9021e64df99f86ae6acf58457f835434 /src/librustc_resolve | |
| parent | 4a45578bc58ff262864f72680cc02e83f5d2f5b3 (diff) | |
| download | rust-2010b4f60b6fd2d3b54e7aeef329bcb7f92aec76.tar.gz rust-2010b4f60b6fd2d3b54e7aeef329bcb7f92aec76.zip | |
resolve: Reduce some clutter in import ambiguity errors
Diffstat (limited to 'src/librustc_resolve')
| -rw-r--r-- | src/librustc_resolve/resolve_imports.rs | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 36b6b5296f0..ff03a986e9e 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -843,14 +843,16 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> { self.current_module = directive.parent_scope.module; let orig_vis = directive.vis.replace(ty::Visibility::Invisible); + let prev_ambiguity_errors_len = self.ambiguity_errors.len(); let path_res = self.resolve_path(&directive.module_path, None, &directive.parent_scope, true, directive.span, directive.crate_lint()); + let no_ambiguity = self.ambiguity_errors.len() == prev_ambiguity_errors_len; directive.vis.set(orig_vis); let module = match path_res { PathResult::Module(module) => { // Consistency checks, analogous to `finalize_current_module_macro_resolutions`. if let Some(initial_module) = directive.imported_module.get() { - if module != initial_module && self.ambiguity_errors.is_empty() { + if module != initial_module && no_ambiguity { span_bug!(directive.span, "inconsistent resolution for an import"); } } else { @@ -864,30 +866,32 @@ impl<'a, 'b:'a, 'c: 'b> ImportResolver<'a, 'b, 'c> { module } PathResult::Failed(span, msg, false) => { - assert!(!self.ambiguity_errors.is_empty() || - directive.imported_module.get().is_none()); - resolve_error(self, span, ResolutionError::FailedToResolve(&msg)); + if no_ambiguity { + assert!(directive.imported_module.get().is_none()); + resolve_error(self, span, ResolutionError::FailedToResolve(&msg)); + } return None; } PathResult::Failed(span, msg, true) => { - assert!(!self.ambiguity_errors.is_empty() || - directive.imported_module.get().is_none()); - return if let Some((suggested_path, note)) = self.make_path_suggestion( - span, directive.module_path.clone(), &directive.parent_scope - ) { - Some(( - span, - format!("did you mean `{}`?", Segment::names_to_string(&suggested_path)), - note, - )) - } else { - Some((span, msg, None)) - }; + if no_ambiguity { + assert!(directive.imported_module.get().is_none()); + return Some(match self.make_path_suggestion(span, directive.module_path.clone(), + &directive.parent_scope) { + Some((suggestion, note)) => ( + span, + format!("did you mean `{}`?", Segment::names_to_string(&suggestion)), + note, + ), + None => (span, msg, None), + }); + } + return None; } PathResult::NonModule(path_res) if path_res.base_def() == Def::Err => { + if no_ambiguity { + assert!(directive.imported_module.get().is_none()); + } // The error was already reported earlier. - assert!(!self.ambiguity_errors.is_empty() || - directive.imported_module.get().is_none()); return None; } PathResult::Indeterminate | PathResult::NonModule(..) => unreachable!(), |
