Skip to content

Commit 7a0ac86

Browse files
committed
Document extern_crate_item_prelude
1 parent 315c089 commit 7a0ac86

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

src/attributes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ You can implement `derive` for your own traits through [procedural macros].
554554

555555
[_LiteralExpression_]: expressions/literal-expr.html
556556
[_SimplePath_]: paths.html#simple-paths
557-
[`no_implicit_prelude`]: items/modules.html
557+
[`no_implicit_prelude`]: items/modules.html#prelude-items
558558
[`no_std`]: crates-and-source-files.html#preludes-and-no_std
559559
[Doc comments]: comments.html#doc-comments
560560
[The Rustdoc Book]: ../rustdoc/the-doc-attribute.html

src/items/extern-crates.md

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,17 @@ extern crate hello_world; // hyphen replaced with an underscore
4040

4141
## Extern Prelude
4242

43-
External crates provided to the compiler are added to the "extern prelude"
44-
which exposes the crate names into lexical scope of every module without the
45-
need for specifying `extern crate`.
43+
External crates imported with `extern crate` in the root module or provided to
44+
the compiler (as with the `--extern` flag with `rustc`) are added to the
45+
"extern prelude". Crates in the extern prelude are in scope in the entire
46+
crate, including inner modules. If renamed as in `extern crate orig_name as
47+
new_name`, then the symbol `new_name` is added to the prelude.
48+
49+
The `core` crate is always added to the extern prelude. The `std` crate
50+
is added as long as the [`no_std`] attribute is not specified.
51+
52+
The [`no_implicit_prelude`] attribute can be used on a module to disable
53+
prelude lookups within that module.
4654

4755
> **Edition Differences**: In the 2015 edition, crates in the extern prelude
4856
> cannot be referenced via [use declarations], so it is generally standard
@@ -51,11 +59,13 @@ need for specifying `extern crate`.
5159
> Beginning in the 2018 edition, [use declarations] can reference crates in
5260
> the extern prelude, so it is considered unidiomatic to use `extern crate`.
5361
54-
> **Note**: Additional crates that ship with `rustc`, such as [`proc_macro`],
55-
> [`alloc`], and [`test`], currently aren't available in the extern prelude
56-
> and must be brought into scope with an `extern crate` declaration, even in
57-
> the 2018 edition. `use` paths must reference the `extern crate` item (such
58-
> as using [`crate::`] or [`self::`] path prefixes).
62+
> **Note**: Crates not explicitly named with the `--extern` flag with `rustc`
63+
> are not included in the extern prelude. This means that additional crates
64+
> that ship with `rustc`, such as [`proc_macro`], [`alloc`], and [`test`],
65+
> currently aren't available in the extern prelude and must be brought into
66+
> scope with an `extern crate` declaration, even in the 2018 edition. `use`
67+
> paths must reference the `extern crate` item (such as using [`crate::`] or
68+
> [`self::`] path prefixes).
5969
>
6070
> ```rust
6171
> extern crate proc_macro;
@@ -67,13 +77,10 @@ need for specifying `extern crate`.
6777
> ```
6878
6979
<!--
70-
Possible upcoming changes that will change this:
71-
The `extern_crate_item_prelude` unstable feature allows `extern crate` to
72-
update the extern prelude in certain situations, see
73-
https://github.com/rust-lang/rust/pull/54658
74-
Unstable `--extern proc_macro` flag that would force the crate into the
75-
extern prelude.
76-
https://github.com/rust-lang/rust/pull/54116
80+
The proc_macro/alloc/test limitation may be lifted if the `--extern`
81+
flag is stabilized and used. See tracking issue
82+
https://github.com/rust-lang/rust/issues/57288 and the unstable
83+
`--extern` flag added in https://github.com/rust-lang/rust/pull/54116.
7784
-->
7885
7986
## Underscore Imports
@@ -91,6 +98,8 @@ into the macro-use prelude.
9198
[`#[macro_use]` attribute]: attributes.html#macro-related-attributes
9299
[`alloc`]: https://doc.rust-lang.org/alloc/
93100
[`crate::`]: paths.html#crate
101+
[`no_implicit_prelude`]: items/modules.html#prelude-items
102+
[`no_std`]: crates-and-source-files.html#preludes-and-no_std
94103
[`proc_macro`]: https://doc.rust-lang.org/proc_macro/
95104
[`self::`]: paths.html#self
96105
[`test`]: https://doc.rust-lang.org/test/

0 commit comments

Comments
 (0)