Skip to content

Commit 7f928d1

Browse files
committed
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]
1 parent 85fd37f commit 7f928d1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+579
-433
lines changed

src/doc/guide-unsafe.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,11 +537,12 @@ extern crate core;
537537
use core::prelude::*;
538538
539539
use core::mem;
540-
use core::raw::Slice;
541540
542541
#[no_mangle]
543542
pub extern fn dot_product(a: *const u32, a_len: u32,
544543
b: *const u32, b_len: u32) -> u32 {
544+
use core::raw::Slice;
545+
545546
// Convert the provided arrays into Rust slices.
546547
// The core::raw module guarantees that the Slice
547548
// structure has the same memory layout as a &[T]

src/libcollections/bitv.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,11 @@ use core::default::Default;
6868
use core::fmt;
6969
use core::iter::Take;
7070
use core::iter;
71-
use core::ops::Index;
7271
use core::slice;
7372
use core::uint;
7473
use std::hash;
7574

76-
use {Collection, Mutable, Set, MutableSet, MutableSeq};
75+
use {Mutable, Set, MutableSet, MutableSeq};
7776
use vec::Vec;
7877

7978

src/libcollections/btree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use alloc::boxed::Box;
2424
use core::fmt;
2525
use core::fmt::Show;
2626

27-
use {Collection, MutableSeq};
27+
use MutableSeq;
2828
use vec::Vec;
2929

3030
#[allow(missing_doc)]

src/libcollections/dlist.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ use core::mem;
3131
use core::ptr;
3232
use std::hash::{Writer, Hash};
3333

34-
use {Collection, Mutable, Deque, MutableSeq};
34+
use {Mutable, Deque, MutableSeq};
3535

3636
/// A doubly-linked list.
3737
pub struct DList<T> {

src/libcollections/lib.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,12 @@
2222
html_playground_url = "http://play.rust-lang.org/")]
2323

2424
#![feature(macro_rules, managed_boxes, default_type_params, phase, globs)]
25-
#![feature(unsafe_destructor)]
25+
#![feature(unsafe_destructor, import_shadowing)]
2626
#![no_std]
2727

28+
// NOTE(stage0, pcwalton): Remove after snapshot.
29+
#![allow(unknown_features)]
30+
2831
#[phase(plugin, link)] extern crate core;
2932
extern crate unicode;
3033
extern crate alloc;
@@ -36,11 +39,11 @@ extern crate alloc;
3639
#[cfg(test)] #[phase(plugin, link)] extern crate std;
3740
#[cfg(test)] #[phase(plugin, link)] extern crate log;
3841

39-
use core::prelude::*;
42+
use core::prelude::Option;
4043

41-
pub use core::collections::Collection;
4244
pub use bitv::{Bitv, BitvSet};
4345
pub use btree::BTree;
46+
pub use core::prelude::Collection;
4447
pub use dlist::DList;
4548
pub use enum_set::EnumSet;
4649
pub use priority_queue::PriorityQueue;

src/libcollections/priority_queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ use core::default::Default;
154154
use core::mem::{zeroed, replace, swap};
155155
use core::ptr;
156156

157-
use {Collection, Mutable, MutableSeq};
157+
use {Mutable, MutableSeq};
158158
use slice;
159159
use vec::Vec;
160160

src/libcollections/ringbuf.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ use core::prelude::*;
1818
use core::cmp;
1919
use core::default::Default;
2020
use core::fmt;
21-
use core::iter::RandomAccessIterator;
2221
use core::iter;
2322
use std::hash::{Writer, Hash};
2423

25-
use {Deque, Collection, Mutable, MutableSeq};
24+
use {Deque, Mutable, MutableSeq};
2625
use vec::Vec;
2726

2827
static INITIAL_CAPACITY: uint = 8u; // 2^3

src/libcollections/slice.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,22 @@ for &x in numbers.iter() {
8686

8787
#![doc(primitive = "slice")]
8888

89-
use core::prelude::*;
90-
9189
use core::cmp;
9290
use core::mem::size_of;
9391
use core::mem;
92+
use core::prelude::{Clone, Collection, Greater, Iterator, Less, None, Option};
93+
use core::prelude::{Ord, Ordering, RawPtr, Some, range};
9494
use core::ptr;
9595
use core::iter::{range_step, MultiplicativeIterator};
9696

97-
use {Collection, MutableSeq};
97+
use MutableSeq;
9898
use vec::Vec;
9999

100-
pub use core::slice::{ref_slice, mut_ref_slice, Splits, Windows};
101100
pub use core::slice::{Chunks, Slice, ImmutableSlice, ImmutablePartialEqSlice};
102101
pub use core::slice::{ImmutableOrdSlice, MutableSlice, Items, MutItems};
103-
pub use core::slice::{MutSplits, MutChunks};
104-
pub use core::slice::{bytes, MutableCloneableSlice};
105-
pub use core::slice::{BinarySearchResult, Found, NotFound};
102+
pub use core::slice::{MutSplits, MutChunks, Splits};
103+
pub use core::slice::{bytes, ref_slice, MutableCloneableSlice};
104+
pub use core::slice::{Found, NotFound};
106105

107106
// Functional utilities
108107

src/libcollections/smallintmap.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use core::iter;
2121
use core::iter::{Enumerate, FilterMap};
2222
use core::mem::replace;
2323

24-
use {Collection, Mutable, Map, MutableMap, MutableSeq};
24+
use {Mutable, Map, MutableMap, MutableSeq};
2525
use {vec, slice};
2626
use vec::Vec;
2727
use hash;

src/libcollections/str.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,17 @@ is the same as `&[u8]`.
6969

7070
#![doc(primitive = "str")]
7171

72-
use core::prelude::*;
73-
7472
use core::default::Default;
7573
use core::fmt;
7674
use core::cmp;
7775
use core::iter::AdditiveIterator;
7876
use core::mem;
77+
use core::prelude::{Char, Clone, Collection, Eq, Equiv, ImmutableSlice};
78+
use core::prelude::{Iterator, MutableSlice, None, Option, Ord, Ordering};
79+
use core::prelude::{PartialEq, PartialOrd, Result, Slice, Some, Tuple2};
80+
use core::prelude::{range};
7981

80-
use {Collection, Deque, MutableSeq};
82+
use {Deque, MutableSeq};
8183
use hash;
8284
use ringbuf::RingBuf;
8385
use string::String;

0 commit comments

Comments
 (0)