Resolve prefix in imports with empty braces
This commit is contained in:
parent
357982fae4
commit
c3f53d1b12
@ -218,8 +218,7 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item) {
|
||||
visitor.visit_path_list_item(prefix, item)
|
||||
}
|
||||
} else {
|
||||
// FIXME(#28388) visit_path should be used instead of walk_path
|
||||
walk_path(visitor, prefix);
|
||||
visitor.visit_path(prefix, item.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2210,10 +2210,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
||||
|
||||
ItemUse(ref view_path) => {
|
||||
// check for imports shadowing primitive types
|
||||
let check_rename = |id, ident: Ident| {
|
||||
match self.def_map.borrow().get(&id).map(|d| d.full_def()) {
|
||||
let check_rename = |this: &Self, id, ident: Ident| {
|
||||
match this.def_map.borrow().get(&id).map(|d| d.full_def()) {
|
||||
Some(DefTy(..)) | Some(DefStruct(..)) | Some(DefTrait(..)) | None => {
|
||||
self.check_if_primitive_type_name(ident.name, item.span);
|
||||
this.check_if_primitive_type_name(ident.name, item.span);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
@ -2221,12 +2221,28 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
||||
|
||||
match view_path.node {
|
||||
hir::ViewPathSimple(ident, _) => {
|
||||
check_rename(item.id, ident);
|
||||
check_rename(self, item.id, ident);
|
||||
}
|
||||
hir::ViewPathList(_, ref items) => {
|
||||
hir::ViewPathList(ref prefix, ref items) => {
|
||||
for item in items {
|
||||
if let Some(ident) = item.node.rename() {
|
||||
check_rename(item.node.id(), ident);
|
||||
check_rename(self, item.node.id(), ident);
|
||||
}
|
||||
}
|
||||
|
||||
// Resolve prefix of an import with empty braces (issue #28388)
|
||||
if items.is_empty() && !prefix.segments.is_empty() {
|
||||
match self.resolve_crate_relative_path(prefix.span,
|
||||
&prefix.segments,
|
||||
TypeNS) {
|
||||
Some((def, lp)) => self.record_def(item.id,
|
||||
PathResolution::new(def, lp, 0)),
|
||||
None => {
|
||||
resolve_error(self,
|
||||
prefix.span,
|
||||
ResolutionError::FailedToResolve(
|
||||
&path_names_to_string(prefix, 0)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -224,8 +224,7 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item) {
|
||||
visitor.visit_path_list_item(prefix, item)
|
||||
}
|
||||
} else {
|
||||
// FIXME(#28388) visit_path should be used instead of walk_path
|
||||
walk_path(visitor, prefix);
|
||||
visitor.visit_path(prefix, item.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
15
src/test/compile-fail/issue-28388-1.rs
Normal file
15
src/test/compile-fail/issue-28388-1.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// Prefix in imports with empty braces should be resolved and checked privacy, stability, etc.
|
||||
|
||||
use foo::{}; //~ ERROR failed to resolve. foo
|
||||
|
||||
fn main() {}
|
19
src/test/compile-fail/issue-28388-2.rs
Normal file
19
src/test/compile-fail/issue-28388-2.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// Prefix in imports with empty braces should be resolved and checked privacy, stability, etc.
|
||||
|
||||
mod m {
|
||||
mod n {}
|
||||
}
|
||||
|
||||
use m::n::{}; //~ ERROR module `n` is private
|
||||
|
||||
fn main() {}
|
16
src/test/compile-fail/issue-28388-3.rs
Normal file
16
src/test/compile-fail/issue-28388-3.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// Prefix in imports with empty braces should be resolved and checked privacy, stability, etc.
|
||||
|
||||
use std::rt::{}; //~ ERROR use of unstable library feature 'rt'
|
||||
use std::{}; // OK
|
||||
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user