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);
}
}
}
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);
}
_ => {}
}
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)));
+ }
}
}
}
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);
}
}
}
--- /dev/null
+// 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() {}
--- /dev/null
+// 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() {}
--- /dev/null
+// 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() {}