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/libsyntax/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/libsyntax/lib.rs') diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index 13d2a632f36..291c876082f 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -24,9 +24,12 @@ html_root_url = "http://doc.rust-lang.org/master/")] #![feature(macro_rules, globs, managed_boxes, default_type_params, phase)] -#![feature(quote, struct_variant, unsafe_destructor)] +#![feature(quote, struct_variant, unsafe_destructor, import_shadowing)] #![allow(deprecated)] +// NOTE(stage0, pcwalton): Remove after snapshot. +#![allow(unknown_features)] + extern crate fmt_macros; extern crate debug; #[phase(plugin, link)] extern crate log; -- cgit 1.4.1-3-g733a5