Pass down NodeId to resolve_path
This commit is contained in:
parent
8830a03043
commit
56ace0aac2
3 changed files with 19 additions and 13 deletions
|
@ -1654,11 +1654,12 @@ impl<'a> Resolver<'a> {
|
|||
let path: Vec<Ident> = 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<Namespace>, // `None` indicates a module path
|
||||
record_used: bool,
|
||||
path_span: Span)
|
||||
path_span: Span,
|
||||
_node_id: Option<NodeId>)
|
||||
-> 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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[..]))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue