diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 671856c4e549..1abf336ed73d 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1654,11 +1654,12 @@ impl<'a> Resolver<'a> { let path: Vec = segments.iter() .map(|seg| Ident::new(seg.name, span)) .collect(); - match self.resolve_path(&path, Some(namespace), true, span) { + // FIXME (Manishearth): Intra doc links won't get warned of epoch changes + match self.resolve_path(&path, Some(namespace), true, span, None) { PathResult::Module(module) => *def = module.def().unwrap(), PathResult::NonModule(path_res) if path_res.unresolved_segments() == 0 => *def = path_res.base_def(), - PathResult::NonModule(..) => match self.resolve_path(&path, None, true, span) { + PathResult::NonModule(..) => match self.resolve_path(&path, None, true, span, None) { PathResult::Failed(span, msg, _) => { error_callback(self, span, ResolutionError::FailedToResolve(&msg)); } @@ -2360,7 +2361,8 @@ impl<'a> Resolver<'a> { if def != Def::Err { new_id = Some(def.def_id()); let span = trait_ref.path.span; - if let PathResult::Module(module) = self.resolve_path(&path, None, false, span) { + if let PathResult::Module(module) = self.resolve_path(&path, None, false, span, + Some(trait_ref.ref_id)) { new_val = Some((module, trait_ref.clone())); } } @@ -2819,7 +2821,8 @@ impl<'a> Resolver<'a> { (format!(""), format!("the crate root")) } else { let mod_path = &path[..path.len() - 1]; - let mod_prefix = match this.resolve_path(mod_path, Some(TypeNS), false, span) { + let mod_prefix = match this.resolve_path(mod_path, Some(TypeNS), + false, span, None) { PathResult::Module(module) => module.def(), _ => None, }.map_or(format!(""), |def| format!("{} ", def.kind_name())); @@ -3149,7 +3152,7 @@ impl<'a> Resolver<'a> { )); } - let result = match self.resolve_path(&path, Some(ns), true, span) { + let result = match self.resolve_path(&path, Some(ns), true, span, Some(id)) { PathResult::NonModule(path_res) => path_res, PathResult::Module(module) if !module.is_normal() => { PathResolution::new(module.def().unwrap()) @@ -3186,7 +3189,7 @@ impl<'a> Resolver<'a> { path[0].name != keywords::CrateRoot.name() && path[0].name != keywords::DollarCrate.name() { let unqualified_result = { - match self.resolve_path(&[*path.last().unwrap()], Some(ns), false, span) { + match self.resolve_path(&[*path.last().unwrap()], Some(ns), false, span, Some(id)) { PathResult::NonModule(path_res) => path_res.base_def(), PathResult::Module(module) => module.def().unwrap(), _ => return Some(result), @@ -3205,7 +3208,8 @@ impl<'a> Resolver<'a> { path: &[Ident], opt_ns: Option, // `None` indicates a module path record_used: bool, - path_span: Span) + path_span: Span, + _node_id: Option) -> PathResult<'a> { let mut module = None; let mut allow_super = true; @@ -3571,7 +3575,7 @@ impl<'a> Resolver<'a> { // Search in module. let mod_path = &path[..path.len() - 1]; if let PathResult::Module(module) = self.resolve_path(mod_path, Some(TypeNS), - false, span) { + false, span, None) { add_module_candidates(module, &mut names); } } diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 0388465b485c..922ffe771479 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -426,7 +426,7 @@ impl<'a> Resolver<'a> { return Err(Determinacy::Determined); } - let def = match self.resolve_path(&path, Some(MacroNS), false, span) { + let def = match self.resolve_path(&path, Some(MacroNS), false, span, None) { PathResult::NonModule(path_res) => match path_res.base_def() { Def::Err => Err(Determinacy::Determined), def @ _ => { @@ -604,7 +604,7 @@ impl<'a> Resolver<'a> { pub fn finalize_current_module_macro_resolutions(&mut self) { let module = self.current_module; for &(ref path, span) in module.macro_resolutions.borrow().iter() { - match self.resolve_path(&path, Some(MacroNS), true, span) { + match self.resolve_path(&path, Some(MacroNS), true, span, None) { PathResult::NonModule(_) => {}, PathResult::Failed(span, msg, _) => { resolve_error(self, span, ResolutionError::FailedToResolve(&msg)); diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index 37c62a7b0b45..d6230cc4a67a 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -535,7 +535,8 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> { // For better failure detection, pretend that the import will not define any names // while resolving its module path. directive.vis.set(ty::Visibility::Invisible); - let result = self.resolve_path(&directive.module_path[..], None, false, directive.span); + let result = self.resolve_path(&directive.module_path[..], None, false, + directive.span, Some(directive.id)); directive.vis.set(vis); match result { @@ -663,7 +664,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> { } } - let module_result = self.resolve_path(&module_path, None, true, span); + let module_result = self.resolve_path(&module_path, None, true, span, Some(directive.id)); let module = match module_result { PathResult::Module(module) => module, PathResult::Failed(span, msg, false) => { @@ -677,7 +678,8 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> { if !self_path.is_empty() && !is_special(self_path[0]) && !(self_path.len() > 1 && is_special(self_path[1])) { self_path[0].name = keywords::SelfValue.name(); - self_result = Some(self.resolve_path(&self_path, None, false, span)); + self_result = Some(self.resolve_path(&self_path, None, false, + span, Some(directive.id))); } return if let Some(PathResult::Module(..)) = self_result { Some((span, format!("Did you mean `{}`?", names_to_string(&self_path[..]))))