Skip to content

Commit 41ee2e9

Browse files
committed
resolve: Suggest use self when import resolves
Improves errors messages by replacing "Maybe a missing `extern crate`" messages with "Did you mean `self::...`" when the `self` import would succeed.
1 parent 38824d1 commit 41ee2e9

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/librustc_resolve/resolve_imports.rs

+15-1
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,21 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
587587
let module = match module_result {
588588
Success(module) => module,
589589
Indeterminate => return Indeterminate,
590-
Failed(err) => return Failed(err),
590+
Failed(err) => {
591+
let self_module = self.current_module.clone();
592+
593+
let resolve_from_self_result = self.resolve_module_path_from_root(
594+
&self_module, &module_path, 0, Some(span));
595+
596+
return match resolve_from_self_result {
597+
Success(_) => {
598+
let msg = format!("Did you mean `self::{}`?",
599+
&names_to_string(module_path));
600+
Failed(Some((span, msg)))
601+
},
602+
_ => Failed(err),
603+
};
604+
},
591605
};
592606

593607
let (name, value_result, type_result) = match directive.subclass {

src/test/compile-fail/unresolved-import.rs

+9
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,12 @@ mod food {
3535
}
3636
}
3737
}
38+
39+
mod m {
40+
enum MyEnum {
41+
MyVariant
42+
}
43+
44+
use MyEnum::*; //~ ERROR unresolved import `MyEnum::*` [E0432]
45+
//~^ Did you mean `self::MyEnum`?
46+
}

0 commit comments

Comments
 (0)