Skip to content

Commit f707582

Browse files
authored
Auto merge of #36289 - euclio:self-suggestion, r=jseyfried
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. Fixes #34191. Thank you for the help @jseyfried!
2 parents 2819eca + 288e7ca commit f707582

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/librustc_resolve/resolve_imports.rs

+13-1
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,19 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
588588
let module = match module_result {
589589
Success(module) => module,
590590
Indeterminate => return Indeterminate,
591-
Failed(err) => return Failed(err),
591+
Failed(err) => {
592+
let self_module = self.module_map[&self.current_module.normal_ancestor_id.unwrap()];
593+
594+
let resolve_from_self_result = self.resolve_module_path_from_root(
595+
&self_module, &module_path, 0, Some(span));
596+
597+
return if let Success(_) = resolve_from_self_result {
598+
let msg = format!("Did you mean `self::{}`?", &names_to_string(module_path));
599+
Failed(Some((span, msg)))
600+
} else {
601+
Failed(err)
602+
};
603+
},
592604
};
593605

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

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

+20
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,23 @@ 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+
}
47+
48+
mod items {
49+
enum Enum {
50+
Variant
51+
}
52+
53+
use Enum::*; //~ ERROR unresolved import `Enum::*` [E0432]
54+
//~^ Did you mean `self::Enum`?
55+
56+
fn item() {}
57+
}

0 commit comments

Comments
 (0)