From d3ca9c61a0685c5add1ce2115402dfc3e2f48912 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Wed, 8 May 2013 21:47:34 -0400 Subject: [PATCH 1/4] Better error message for certain classes of unresolved imports --- src/librustc/middle/resolve.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index ff002afd028f5..26dad202ab32c 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -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. perhaps \ + you forgot an 'extern mod %s'?", + *segment_name)); + return Failed; + } self.session.span_err(span, ~"unresolved name"); return Failed; } From fa5baf399d1962fae5b02d9d4b11702eae2d8d70 Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 9 May 2013 13:42:26 -0300 Subject: [PATCH 2/4] Tweak error message Recommendation of @kud1ing --- src/librustc/middle/resolve.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index 26dad202ab32c..e5eb926c02be1 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2487,8 +2487,8 @@ pub impl Resolver { 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. perhaps \ - you forgot an 'extern mod %s'?", + span.expn_info}, fmt!("unresolved import. maybe \ + a missing 'extern mod %s'?", *segment_name)); return Failed; } From 0afcd3421577283be7150aca5fdf13b8f8d60b0f Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 9 May 2013 16:16:22 -0400 Subject: [PATCH 3/4] compile-fail test for new unresolved import error --- src/test/compile-fail/unresolved-import.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/test/compile-fail/unresolved-import.rs diff --git a/src/test/compile-fail/unresolved-import.rs b/src/test/compile-fail/unresolved-import.rs new file mode 100644 index 0000000000000..1bd3efeadcbba --- /dev/null +++ b/src/test/compile-fail/unresolved-import.rs @@ -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 or the MIT license +// , 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 From 9cbab89076c48bffd966303a1cf2856df2b00dcc Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Thu, 9 May 2013 19:09:43 -0400 Subject: [PATCH 4/4] fix formating and tests --- src/librustc/middle/resolve.rs | 2 +- src/test/compile-fail/issue-1697.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs index e5eb926c02be1..b6106f9a5c072 100644 --- a/src/librustc/middle/resolve.rs +++ b/src/librustc/middle/resolve.rs @@ -2487,7 +2487,7 @@ pub impl Resolver { 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 \ + span.expn_info}, fmt!("unresolved import. maybe \ a missing 'extern mod %s'?", *segment_name)); return Failed; diff --git a/src/test/compile-fail/issue-1697.rs b/src/test/compile-fail/issue-1697.rs index a0d2536d85f0e..71b319a27d073 100644 --- a/src/test/compile-fail/issue-1697.rs +++ b/src/test/compile-fail/issue-1697.rs @@ -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() {