Skip to content

Commit 1e4c817

Browse files
committed
Improve diagnostics and remove dead code.
1 parent 87ae68c commit 1e4c817

File tree

2 files changed

+23
-31
lines changed

2 files changed

+23
-31
lines changed

src/librustc_resolve/lib.rs

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,7 +1287,7 @@ impl<'a> Resolver<'a> {
12871287
while index < module_path_len {
12881288
let name = module_path[index];
12891289
match self.resolve_name_in_module(search_module, name, TypeNS, false, span) {
1290-
Failed(None) => {
1290+
Failed(_) => {
12911291
let segment_name = name.as_str();
12921292
let module_name = module_to_string(search_module);
12931293
let msg = if "???" == &module_name {
@@ -1314,7 +1314,6 @@ impl<'a> Resolver<'a> {
13141314

13151315
return Failed(span.map(|span| (span, msg)));
13161316
}
1317-
Failed(err) => return Failed(err),
13181317
Indeterminate => {
13191318
debug!("(resolving module path for import) module resolution is \
13201319
indeterminate: {}",
@@ -1383,7 +1382,11 @@ impl<'a> Resolver<'a> {
13831382
let ident = ast::Ident::with_empty_ctxt(module_path[0]);
13841383
match self.resolve_ident_in_lexical_scope(ident, TypeNS, span)
13851384
.and_then(LexicalScopeBinding::module) {
1386-
None => return Failed(None),
1385+
None => {
1386+
let msg =
1387+
format!("Use of undeclared type or module `{}`", ident.name);
1388+
return Failed(span.map(|span| (span, msg)));
1389+
}
13871390
Some(containing_module) => {
13881391
search_module = containing_module;
13891392
start_index = 1;
@@ -2614,16 +2617,9 @@ impl<'a> Resolver<'a> {
26142617
let containing_module;
26152618
match self.resolve_module_path(&module_path, UseLexicalScope, Some(span)) {
26162619
Failed(err) => {
2617-
let (span, msg) = match err {
2618-
Some((span, msg)) => (span, msg),
2619-
None => {
2620-
let msg = format!("Use of undeclared type or module `{}`",
2621-
names_to_string(&module_path));
2622-
(span, msg)
2623-
}
2624-
};
2625-
2626-
resolve_error(self, span, ResolutionError::FailedToResolve(&msg));
2620+
if let Some((span, msg)) = err {
2621+
resolve_error(self, span, ResolutionError::FailedToResolve(&msg));
2622+
}
26272623
return Err(true);
26282624
}
26292625
Indeterminate => return Err(false),
@@ -2651,16 +2647,9 @@ impl<'a> Resolver<'a> {
26512647
let containing_module;
26522648
match self.resolve_module_path_from_root(root_module, &module_path, 0, Some(span)) {
26532649
Failed(err) => {
2654-
let (span, msg) = match err {
2655-
Some((span, msg)) => (span, msg),
2656-
None => {
2657-
let msg = format!("Use of undeclared module `::{}`",
2658-
names_to_string(&module_path));
2659-
(span, msg)
2660-
}
2661-
};
2662-
2663-
resolve_error(self, span, ResolutionError::FailedToResolve(&msg));
2650+
if let Some((span, msg)) = err {
2651+
resolve_error(self, span, ResolutionError::FailedToResolve(&msg));
2652+
}
26642653
return Err(true);
26652654
}
26662655

@@ -3270,12 +3259,11 @@ impl<'a> Resolver<'a> {
32703259
path_resolution = PathResolution::new(def);
32713260
ty::Visibility::Restricted(self.definitions.as_local_node_id(def.def_id()).unwrap())
32723261
}
3273-
Failed(Some((span, msg))) => {
3274-
self.session.span_err(span, &format!("failed to resolve module path. {}", msg));
3275-
ty::Visibility::Public
3276-
}
3277-
_ => {
3278-
self.session.span_err(path.span, "unresolved module path");
3262+
Indeterminate => unreachable!(),
3263+
Failed(err) => {
3264+
if let Some((span, msg)) = err {
3265+
self.session.span_err(span, &format!("failed to resolve module path. {}", msg));
3266+
}
32793267
ty::Visibility::Public
32803268
}
32813269
};

src/test/compile-fail/bad-module.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11-
// error-pattern: failed to resolve. Use of undeclared type or module `thing`
11+
fn main() {
12+
let foo = thing::len(Vec::new());
13+
//~^ ERROR failed to resolve. Use of undeclared type or module `thing`
1214

13-
fn main() { let foo = thing::len(Vec::new()); }
15+
let foo = foo::bar::baz();
16+
//~^ ERROR failed to resolve. Use of undeclared type or module `foo`
17+
}

0 commit comments

Comments
 (0)