mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-06 04:08:40 +00:00
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)
|
visitor.visit_path_list_item(prefix, item)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// FIXME(#28388) visit_path should be used instead of walk_path
|
visitor.visit_path(prefix, item.id);
|
||||||
walk_path(visitor, prefix);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2210,10 +2210,10 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
|||||||
|
|
||||||
ItemUse(ref view_path) => {
|
ItemUse(ref view_path) => {
|
||||||
// check for imports shadowing primitive types
|
// check for imports shadowing primitive types
|
||||||
let check_rename = |id, ident: Ident| {
|
let check_rename = |this: &Self, id, ident: Ident| {
|
||||||
match self.def_map.borrow().get(&id).map(|d| d.full_def()) {
|
match this.def_map.borrow().get(&id).map(|d| d.full_def()) {
|
||||||
Some(DefTy(..)) | Some(DefStruct(..)) | Some(DefTrait(..)) | None => {
|
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 {
|
match view_path.node {
|
||||||
hir::ViewPathSimple(ident, _) => {
|
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 {
|
for item in items {
|
||||||
if let Some(ident) = item.node.rename() {
|
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)
|
visitor.visit_path_list_item(prefix, item)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// FIXME(#28388) visit_path should be used instead of walk_path
|
visitor.visit_path(prefix, item.id);
|
||||||
walk_path(visitor, prefix);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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