]> git.lizzy.rs Git - rust.git/commitdiff
Documenting the separate behaviors of edition 2015 and 2018
authorAlexis Bourget <alexis.bourget@gmail.com>
Sun, 21 Jun 2020 12:39:46 +0000 (14:39 +0200)
committerAlexis Bourget <alexis.bourget@gmail.com>
Sun, 21 Jun 2020 12:39:46 +0000 (14:39 +0200)
src/librustc_error_codes/error_codes/E0432.md

index b562a85b785ff37ec3bb5e3756cd191e83a7d4ca..63977ae356ccde5aaa6be940132ddcec8c75d967 100644 (file)
@@ -12,8 +12,20 @@ prefixes, respectively. Also verify that you didn't misspell the import
 name and that the import exists in the module from where you tried to
 import it. Example:
 
+In Rust 2015, paths in `use` statements are relative to the crate root. To
+import items relative to the current and parent modules, use the `self::` and
+`super::` prefixes, respectively.
+
+In Rust 2018, paths in `use` statements are relative to the current module
+unless they begin with the name of a crate or a literal `crate::`, in which
+case they start from the crate root. As in Rust 2015 code, the `self::` and
+`super::` prefixes refer to the current and parent modules respectively.
+
+Also verify that you didn't misspell the import name and that the import exists
+in the module from where you tried to import it. Example:
+
 ```
-use self::something::Foo; // ok!
+use self::something::Foo; // Ok.
 
 mod something {
     pub struct Foo;
@@ -21,12 +33,21 @@ mod something {
 # fn main() {}
 ```
 
-Or, if you tried to use a module from an external crate, you may have missed
-the `extern crate` declaration (which is usually placed in the crate root):
+If you tried to use a module from an external crate and are using Rust 2015,
+you may have missed the `extern crate` declaration (which is usually placed in
+the crate root):
 
-```
-extern crate core; // Required to use the `core` crate
+```edition2015
+extern crate core; // Required to use the `core` crate in Rust 2015.
 
 use core::any;
+# fn main() { assert!(false); }
+```
+
+In Rust 2018 the `extern crate` declaration is not required and you can instead
+just `use` it:
+
+```
+use core::any; // No extern crate required in Rust 2018.
 # fn main() {}
 ```