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/librustc/front/std_inject.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/librustc/front/std_inject.rs') diff --git a/src/librustc/front/std_inject.rs b/src/librustc/front/std_inject.rs index 5dca09faf34..ff8711c5df0 100644 --- a/src/librustc/front/std_inject.rs +++ b/src/librustc/front/std_inject.rs @@ -19,6 +19,7 @@ use syntax::fold::Folder; use syntax::fold; use syntax::owned_slice::OwnedSlice; use syntax::parse::token::InternedString; +use syntax::parse::token::special_idents; use syntax::parse::token; use syntax::util::small_vector::SmallVector; @@ -197,7 +198,19 @@ impl<'a> fold::Folder for PreludeInjector<'a> { ast::DUMMY_NODE_ID)); let vi2 = ast::ViewItem { node: ast::ViewItemUse(vp), - attrs: Vec::new(), + attrs: vec!(ast::Attribute { + span: DUMMY_SP, + node: ast::Attribute_ { + id: attr::mk_attr_id(), + style: ast::AttrOuter, + value: box(GC) ast::MetaItem { + span: DUMMY_SP, + node: ast::MetaWord(token::get_name( + special_idents::prelude_import.name)), + }, + is_sugared_doc: false, + }, + }), vis: ast::Inherited, span: DUMMY_SP, }; -- cgit 1.4.1-3-g733a5