From 6e8251742071d56545b6ce160ed71bb60597ee01 Mon Sep 17 00:00:00 2001 From: Alexis Bourget Date: Sun, 21 Jun 2020 14:39:46 +0200 Subject: [PATCH 1/2] Documenting the separate behaviors of edition 2015 and 2018 --- src/librustc_error_codes/error_codes/E0432.md | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/librustc_error_codes/error_codes/E0432.md b/src/librustc_error_codes/error_codes/E0432.md index b562a85b785ff..63977ae356ccd 100644 --- a/src/librustc_error_codes/error_codes/E0432.md +++ b/src/librustc_error_codes/error_codes/E0432.md @@ -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() {} ``` From 59701360dc0c76bfa45204d307ac5055f8bff538 Mon Sep 17 00:00:00 2001 From: Alexis Bourget Date: Sun, 21 Jun 2020 15:47:08 +0200 Subject: [PATCH 2/2] Fix some small mistakes --- src/librustc_error_codes/error_codes/E0432.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/librustc_error_codes/error_codes/E0432.md b/src/librustc_error_codes/error_codes/E0432.md index 63977ae356ccd..a6e2acac5d295 100644 --- a/src/librustc_error_codes/error_codes/E0432.md +++ b/src/librustc_error_codes/error_codes/E0432.md @@ -6,12 +6,6 @@ Erroneous code example: use something::Foo; // error: unresolved import `something::Foo`. ``` -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. 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. @@ -41,13 +35,13 @@ the crate root): extern crate core; // Required to use the `core` crate in Rust 2015. use core::any; -# fn main() { assert!(false); } +# fn main() {} ``` In Rust 2018 the `extern crate` declaration is not required and you can instead just `use` it: -``` +```edition2018 use core::any; // No extern crate required in Rust 2018. # fn main() {} ```