From acb9f9ba385a9207a5f60448a1c374f2eceff13d Mon Sep 17 00:00:00 2001 From: Takayuki Maeda <takoyaki0316@gmail.com> Date: Wed, 3 Nov 2021 01:44:01 +0900 Subject: [PATCH 1/2] add a suggestion about undeclared `alloc` module --- compiler/rustc_resolve/src/diagnostics.rs | 4 +++ compiler/rustc_resolve/src/lib.rs | 28 +++++++++++++------ .../ui/suggestions/undeclared-module-alloc.rs | 5 ++++ .../undeclared-module-alloc.stderr | 11 ++++++++ 4 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 src/test/ui/suggestions/undeclared-module-alloc.rs create mode 100644 src/test/ui/suggestions/undeclared-module-alloc.stderr diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs index 163acebcceacf..ff0d76e94fdf5 100644 --- a/compiler/rustc_resolve/src/diagnostics.rs +++ b/compiler/rustc_resolve/src/diagnostics.rs @@ -420,6 +420,10 @@ impl<'a> Resolver<'a> { err.span_label(span, label); if let Some((suggestions, msg, applicability)) = suggestion { + if suggestions.is_empty() { + err.help(&msg); + return err; + } err.multipart_suggestion(&msg, suggestions, applicability); } diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index 23eb2d1aebb7c..55de096d1a458 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -2523,19 +2523,29 @@ impl<'a> Resolver<'a> { } else { ( format!("use of undeclared crate or module `{}`", ident), - self.find_similarly_named_module_or_crate( - ident.name, - &parent_scope.module, - ) - .map(|sugg| { - ( - vec![(ident.span, sugg.to_string())], + if ident.name == sym::alloc { + Some(( + vec![], String::from( - "there is a crate or module with a similar name", + "add `extern crate alloc` to use the builtin `alloc` module", ), Applicability::MaybeIncorrect, + )) + } else { + self.find_similarly_named_module_or_crate( + ident.name, + &parent_scope.module, ) - }), + .map(|sugg| { + ( + vec![(ident.span, sugg.to_string())], + String::from( + "there is a crate or module with a similar name", + ), + Applicability::MaybeIncorrect, + ) + }) + }, ) } } else { diff --git a/src/test/ui/suggestions/undeclared-module-alloc.rs b/src/test/ui/suggestions/undeclared-module-alloc.rs new file mode 100644 index 0000000000000..1defa1cef2863 --- /dev/null +++ b/src/test/ui/suggestions/undeclared-module-alloc.rs @@ -0,0 +1,5 @@ +// edition:2018 + +use alloc::rc::Rc; //~ ERROR failed to resolve: use of undeclared crate or module `alloc` + +fn main() {} diff --git a/src/test/ui/suggestions/undeclared-module-alloc.stderr b/src/test/ui/suggestions/undeclared-module-alloc.stderr new file mode 100644 index 0000000000000..4da0619af9879 --- /dev/null +++ b/src/test/ui/suggestions/undeclared-module-alloc.stderr @@ -0,0 +1,11 @@ +error[E0433]: failed to resolve: use of undeclared crate or module `alloc` + --> $DIR/undeclared-module-alloc.rs:3:5 + | +LL | use alloc::rc::Rc; + | ^^^^^ use of undeclared crate or module `alloc` + | + = help: add `extern crate alloc` to use the builtin `alloc` module + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0433`. From 6c1e194534ab91ecdb3aa953089964c364b6b2e2 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda <takoyaki0316@gmail.com> Date: Wed, 3 Nov 2021 13:53:57 +0900 Subject: [PATCH 2/2] fix message --- compiler/rustc_resolve/src/lib.rs | 2 +- src/test/ui/suggestions/undeclared-module-alloc.stderr | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs index 55de096d1a458..5f3620b247e26 100644 --- a/compiler/rustc_resolve/src/lib.rs +++ b/compiler/rustc_resolve/src/lib.rs @@ -2527,7 +2527,7 @@ impl<'a> Resolver<'a> { Some(( vec![], String::from( - "add `extern crate alloc` to use the builtin `alloc` module", + "add `extern crate alloc` to use the `alloc` crate", ), Applicability::MaybeIncorrect, )) diff --git a/src/test/ui/suggestions/undeclared-module-alloc.stderr b/src/test/ui/suggestions/undeclared-module-alloc.stderr index 4da0619af9879..39169dfa9f777 100644 --- a/src/test/ui/suggestions/undeclared-module-alloc.stderr +++ b/src/test/ui/suggestions/undeclared-module-alloc.stderr @@ -4,7 +4,7 @@ error[E0433]: failed to resolve: use of undeclared crate or module `alloc` LL | use alloc::rc::Rc; | ^^^^^ use of undeclared crate or module `alloc` | - = help: add `extern crate alloc` to use the builtin `alloc` module + = help: add `extern crate alloc` to use the `alloc` crate error: aborting due to previous error