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:
bors
2013-05-10 00:52:52 -07:00
3 changed files with 24 additions and 2 deletions
+11 -1
View File
@@ -64,7 +64,7 @@
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 @@ fn resolve_module_path_from_root(@mut self,
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;
}
+1 -1
View File
@@ -10,7 +10,7 @@
// Testing that we don't fail abnormally after hitting the errors
use unresolved::*; //~ ERROR unresolved name
use unresolved::*; //~ ERROR unresolved import. maybe a missing
//~^ ERROR failed to resolve import
fn main() {
@@ -0,0 +1,12 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use foo::bar; //~ ERROR unresolved import. maybe a missing
//~^ ERROR failed to resolve import