Skip to content

Commit

Permalink
When an import fails to resolve, make the error message say
Browse files Browse the repository at this point in the history
which import it actually was. This makes debugging imports
like: use aa::{x, y, z} easier (for issue rust-lang#2914).
  • Loading branch information
gareth authored and gareth committed Dec 29, 2012
1 parent 5245ace commit b6aafe9
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions src/librustc/middle/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2086,8 +2086,11 @@ impl Resolver {
match self.resolve_import_for_module(module_, import_directive) {
Failed => {
// We presumably emitted an error. Continue.
self.session.span_err(import_directive.span,
~"failed to resolve import");
let idents = import_directive.module_path.get();
let msg = fmt!("failed to resolve import: %s",
self.import_path_to_str(idents,
*import_directive.subclass));
self.session.span_err(import_directive.span, msg);
}
Indeterminate => {
// Bail out. We'll come around next time.
Expand Down Expand Up @@ -2117,6 +2120,26 @@ impl Resolver {
// XXX: Shouldn't copy here. We need string builder functionality.
return result;
}

fn import_directive_subclass_to_str(subclass: ImportDirectiveSubclass)
-> ~str {
match subclass {
SingleImport(_target, source, _ns) => self.session.str_of(source),
GlobImport => ~"*"
}
}
fn import_path_to_str(idents: ~[ident], subclass: ImportDirectiveSubclass)
-> ~str {
if idents.is_empty() {
self.import_directive_subclass_to_str(subclass)
} else {
fmt!("%s::%s",
self.idents_to_str(idents),
self.import_directive_subclass_to_str(subclass))
}
}

/**
* Attempts to resolve the given import. The return value indicates
* failure if we're certain the name does not exist, indeterminate if we
Expand Down

0 comments on commit b6aafe9

Please sign in to comment.