Auto merge of #46864 - estebank:closure-type-err-sp, r=nikomatsakis

Closure type error ui tweak

Do not point at the same span on all notes/help messages, and instead
show them without a span.
This commit is contained in:
bors 2017-12-23 04:40:39 +00:00
commit 1699293083
13 changed files with 52 additions and 100 deletions

View File

@ -260,10 +260,8 @@ pub fn note_and_explain_type_err(self,
let expected_str = values.expected.sort_string(self);
let found_str = values.found.sort_string(self);
if expected_str == found_str && expected_str == "closure" {
db.span_note(sp,
"no two closures, even if identical, have the same type");
db.span_help(sp,
"consider boxing your closure and/or using it as a trait object");
db.note("no two closures, even if identical, have the same type");
db.help("consider boxing your closure and/or using it as a trait object");
}
},
TyParamDefaultMismatch(values) => {

View File

@ -402,8 +402,8 @@ fn check_arms<'a, 'tcx>(cx: &mut MatchCheckCtxt<'a, 'tcx>,
);
// if we had a catchall pattern, hint at that
if let Some(catchall) = catchall {
err.span_label(pat.span, "this is an unreachable pattern");
err.span_note(catchall, "this pattern matches any value");
err.span_label(pat.span, "unreachable pattern");
err.span_label(catchall, "matches any value");
}
err.emit();
},

View File

@ -220,7 +220,7 @@ fn build_reduced_graph_for_use_tree(&mut self,
ResolutionError::SelfImportCanOnlyAppearOnceInTheList);
for other_span in self_spans.iter().skip(1) {
e.span_note(*other_span, "another `self` import appears here");
e.span_label(*other_span, "another `self` import appears here");
}
e.emit();

View File

@ -290,17 +290,17 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver,
"`self` imports are only allowed within a { } list")
}
ResolutionError::SelfImportCanOnlyAppearOnceInTheList => {
struct_span_err!(resolver.session,
span,
E0430,
"`self` import can only appear once in the list")
let mut err = struct_span_err!(resolver.session, span, E0430,
"`self` import can only appear once in an import list");
err.span_label(span, "can only appear once in an import list");
err
}
ResolutionError::SelfImportOnlyInImportListWithNonEmptyPrefix => {
struct_span_err!(resolver.session,
span,
E0431,
"`self` import can only appear in an import list with a \
non-empty prefix")
let mut err = struct_span_err!(resolver.session, span, E0431,
"`self` import can only appear in an import list with \
a non-empty prefix");
err.span_label(span, "can only appear in an import list with a non-empty prefix");
err
}
ResolutionError::UnresolvedImport(name) => {
let (span, msg) = match name {
@ -320,18 +320,17 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver,
err
}
ResolutionError::CannotCaptureDynamicEnvironmentInFnItem => {
struct_span_err!(resolver.session,
span,
E0434,
"{}",
"can't capture dynamic environment in a fn item; use the || { ... } \
closure form instead")
let mut err = struct_span_err!(resolver.session,
span,
E0434,
"{}",
"can't capture dynamic environment in a fn item");
err.help("use the `|| { ... }` closure form instead");
err
}
ResolutionError::AttemptToUseNonConstantValueInConstant => {
let mut err = struct_span_err!(resolver.session,
span,
E0435,
"attempt to use a non-constant value in a constant");
let mut err = struct_span_err!(resolver.session, span, E0435,
"attempt to use a non-constant value in a constant");
err.span_label(span, "non-constant value");
err
}
@ -351,8 +350,7 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver,
let mut err = struct_span_err!(resolver.session, span, E0128,
"type parameters with a default cannot use \
forward declared identifiers");
err.span_label(span, format!("defaulted type parameters \
cannot be forward declared"));
err.span_label(span, format!("defaulted type parameters cannot be forward declared"));
err
}
}
@ -3950,7 +3948,7 @@ fn check_proc_macro_attrs(&mut self, attrs: &[ast::Attribute]) {
feature_err(&self.session.parse_sess, feature,
attr.span, GateIssue::Language, msg)
.span_note(binding.span(), "procedural macro imported here")
.span_label(binding.span(), "procedural macro imported here")
.emit();
}
}

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// error-pattern: can't capture dynamic environment in a fn item;
// error-pattern: can't capture dynamic environment in a fn item
fn foo() {
let x: isize;
fn bar() { log(debug, x); }

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// error-pattern: can't capture dynamic environment in a fn item;
// error-pattern: can't capture dynamic environment in a fn item
fn foo(x: isize) {
fn bar() { log(debug, x); }
}

View File

@ -8,7 +8,7 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// error-pattern: can't capture dynamic environment in a fn item;
// error-pattern: can't capture dynamic environment in a fn item
fn foo(x: isize) {
fn mth() {
fn bar() { log(debug, x); }

View File

@ -9,7 +9,7 @@
// except according to those terms.
// error-pattern: can't capture dynamic environment in a fn item;
// error-pattern: can't capture dynamic environment in a fn item
fn main() {
let bar: isize = 5;

View File

@ -6,16 +6,8 @@ error[E0308]: mismatched types
|
= note: expected type `[closure@$DIR/issue-24036.rs:12:17: 12:26]`
found type `[closure@$DIR/issue-24036.rs:13:9: 13:18]`
note: no two closures, even if identical, have the same type
--> $DIR/issue-24036.rs:13:9
|
13 | x = |c| c + 1;
| ^^^^^^^^^
help: consider boxing your closure and/or using it as a trait object
--> $DIR/issue-24036.rs:13:9
|
13 | x = |c| c + 1;
| ^^^^^^^^^
= note: no two closures, even if identical, have the same type
= help: consider boxing your closure and/or using it as a trait object
error[E0308]: match arms have incompatible types
--> $DIR/issue-24036.rs:18:13
@ -31,28 +23,8 @@ error[E0308]: match arms have incompatible types
|
= note: expected type `[closure@$DIR/issue-24036.rs:20:14: 20:23]`
found type `[closure@$DIR/issue-24036.rs:21:14: 21:23]`
note: no two closures, even if identical, have the same type
--> $DIR/issue-24036.rs:18:13
|
18 | let x = match 1usize {
| _____________^
19 | | //~^ ERROR match arms have incompatible types
20 | | 1 => |c| c + 1,
21 | | 2 => |c| c - 1,
22 | | _ => |c| c - 1
23 | | };
| |_____^
help: consider boxing your closure and/or using it as a trait object
--> $DIR/issue-24036.rs:18:13
|
18 | let x = match 1usize {
| _____________^
19 | | //~^ ERROR match arms have incompatible types
20 | | 1 => |c| c + 1,
21 | | 2 => |c| c - 1,
22 | | _ => |c| c - 1
23 | | };
| |_____^
= note: no two closures, even if identical, have the same type
= help: consider boxing your closure and/or using it as a trait object
note: match arm with an incompatible type
--> $DIR/issue-24036.rs:21:14
|

View File

@ -9,19 +9,17 @@ warning[E0170]: pattern binding `Nil` is named the same as one of the variants o
error: unreachable pattern
--> $DIR/issue-30302.rs:25:9
|
23 | Nil => true,
| --- matches any value
24 | //~^ WARN pattern binding `Nil` is named the same as one of the variants of the type `Stack`
25 | _ => false
| ^ this is an unreachable pattern
| ^ unreachable pattern
|
note: lint level defined here
--> $DIR/issue-30302.rs:14:9
|
14 | #![deny(unreachable_patterns)]
| ^^^^^^^^^^^^^^^^^^^^
note: this pattern matches any value
--> $DIR/issue-30302.rs:23:9
|
23 | Nil => true,
| ^^^
error: aborting due to previous error

View File

@ -1,43 +1,32 @@
error: unreachable pattern
--> $DIR/issue-31221.rs:28:9
|
27 | Var3 => (),
| ---- matches any value
28 | Var2 => (),
| ^^^^ this is an unreachable pattern
| ^^^^ unreachable pattern
|
note: lint level defined here
--> $DIR/issue-31221.rs:14:9
|
14 | #![deny(unreachable_patterns)]
| ^^^^^^^^^^^^^^^^^^^^
note: this pattern matches any value
--> $DIR/issue-31221.rs:27:9
|
27 | Var3 => (),
| ^^^^
error: unreachable pattern
--> $DIR/issue-31221.rs:34:9
|
34 | &Var2 => (),
| ^^^^^ this is an unreachable pattern
|
note: this pattern matches any value
--> $DIR/issue-31221.rs:33:9
|
33 | &Var3 => (),
| ^^^^^
| ----- matches any value
34 | &Var2 => (),
| ^^^^^ unreachable pattern
error: unreachable pattern
--> $DIR/issue-31221.rs:41:9
|
41 | anything => ()
| ^^^^^^^^ this is an unreachable pattern
|
note: this pattern matches any value
--> $DIR/issue-31221.rs:40:9
|
40 | (c, d) => (),
| ^^^^^^
| ------ matches any value
41 | anything => ()
| ^^^^^^^^ unreachable pattern
error: aborting due to 3 previous errors

View File

@ -10,7 +10,7 @@
use foo::bar::{
self,
//~^ ERROR `self` import can only appear once in the list
//~^ ERROR `self` import can only appear once in an import list
Bar,
self
//~^ ERROR the name `bar` is defined multiple times

View File

@ -1,20 +1,17 @@
error[E0430]: `self` import can only appear once in the list
error[E0430]: `self` import can only appear once in an import list
--> $DIR/use-mod.rs:12:5
|
12 | self,
| ^^^^
|
note: another `self` import appears here
--> $DIR/use-mod.rs:15:5
|
| ^^^^ can only appear once in an import list
...
15 | self
| ^^^^
| ---- another `self` import appears here
error[E0431]: `self` import can only appear in an import list with a non-empty prefix
--> $DIR/use-mod.rs:19:6
|
19 | use {self};
| ^^^^
| ^^^^ can only appear in an import list with a non-empty prefix
error[E0252]: the name `bar` is defined multiple times
--> $DIR/use-mod.rs:15:5