auto merge of #6347 : cmr/rust/unknown_module_resolve_error, r=catamorphism
This improves error reporting for the following class of imports:
```rust
use foo::bar;
```
Where foo, the topmost module, is unresolved. It now results in:
```text
/tmp/foo.rs:1:4: 1:7 error: unresolved import. perhapsyou forgot an 'extern mod foo'?
/tmp/foo.rs:1 use foo::bar;
^~~
/tmp/foo.rs:1:4: 1:12 error: failed to resolve import: foo::bar
/tmp/foo.rs:1 use foo::bar;
^~~~~~~~
error: failed to resolve imports
error: aborting due to 3 previous errors
```
This is the first of a series of changes I plan on making to unresolved name error messages.
This commit is contained in:
commit
f04eb37c7e
3 changed files with 24 additions and 2 deletions
|
|
@ -64,7 +64,7 @@ use syntax::attr::{attr_metas, contains_name, attrs_contains_name};
|
|||
use syntax::parse::token::ident_interner;
|
||||
use syntax::parse::token::special_idents;
|
||||
use syntax::print::pprust::path_to_str;
|
||||
use syntax::codemap::{span, dummy_sp};
|
||||
use syntax::codemap::{span, dummy_sp, BytePos};
|
||||
use syntax::visit::{default_visitor, mk_vt, Visitor, visit_block};
|
||||
use syntax::visit::{visit_crate, visit_expr, visit_expr_opt};
|
||||
use syntax::visit::{visit_foreign_item, visit_item};
|
||||
|
|
@ -2482,6 +2482,16 @@ pub impl Resolver {
|
|||
TypeNS,
|
||||
name_search_type) {
|
||||
Failed => {
|
||||
let segment_name = self.session.str_of(name);
|
||||
let module_name = self.module_to_str(search_module);
|
||||
if module_name == ~"???" {
|
||||
self.session.span_err(span {lo: span.lo, hi: span.lo +
|
||||
BytePos(str::len(*segment_name)), expn_info:
|
||||
span.expn_info}, fmt!("unresolved import. maybe \
|
||||
a missing 'extern mod %s'?",
|
||||
*segment_name));
|
||||
return Failed;
|
||||
}
|
||||
self.session.span_err(span, ~"unresolved name");
|
||||
return Failed;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue