From 7f928d150e53b5873b4238f9e60d1aa4be9b602f Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 12 Aug 2014 20:31:30 -0700 Subject: librustc: Forbid external crates, imports, and/or items from being declared with the same name in the same scope. This breaks several common patterns. First are unused imports: use foo::bar; use baz::bar; Change this code to the following: use baz::bar; Second, this patch breaks globs that import names that are shadowed by subsequent imports. For example: use foo::*; // including `bar` use baz::bar; Change this code to remove the glob: use foo::{boo, quux}; use baz::bar; Or qualify all uses of `bar`: use foo::{boo, quux}; use baz; ... baz::bar ... Finally, this patch breaks code that, at top level, explicitly imports `std` and doesn't disable the prelude. extern crate std; Because the prelude imports `std` implicitly, there is no need to explicitly import it; just remove such directives. The old behavior can be opted into via the `import_shadowing` feature gate. Use of this feature gate is discouraged. This implements RFC #116. Closes #16464. [breaking-change] --- src/libstd/lib.rs | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/libstd/lib.rs') diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs index 103cd574e73..fb6599d808c 100644 --- a/src/libstd/lib.rs +++ b/src/libstd/lib.rs @@ -107,10 +107,14 @@ #![feature(macro_rules, globs, managed_boxes, linkage)] #![feature(default_type_params, phase, lang_items, unsafe_destructor)] +#![feature(import_shadowing)] // Don't link to std. We are std. #![no_std] +// NOTE(stage0, pcwalton): Remove after snapshot. +#![allow(unknown_features)] + #![allow(deprecated)] #![deny(missing_doc)] -- cgit 1.4.1-3-g733a5