Reduce diagnostic verbosity by removing labels

This commit is contained in:
Esteban Küber 2018-03-19 14:13:57 -07:00
parent f332a9ce56
commit 062a46fdd1
9 changed files with 18 additions and 23 deletions

View File

@ -938,14 +938,14 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
} }
if inexistent_fields.len() > 0 { if inexistent_fields.len() > 0 {
let field_names = if inexistent_fields.len() == 1 { let (field_names, t, plural) = if inexistent_fields.len() == 1 {
format!("a field named `{}`", inexistent_fields[0].1) (format!("a field named `{}`", inexistent_fields[0].1), "this", "")
} else { } else {
format!("fields named {}", (format!("fields named {}",
inexistent_fields.iter() inexistent_fields.iter()
.map(|(_, name)| format!("`{}`", name)) .map(|(_, name)| format!("`{}`", name))
.collect::<Vec<String>>() .collect::<Vec<String>>()
.join(", ")) .join(", ")), "these", "s")
}; };
let spans = inexistent_fields.iter().map(|(span, _)| *span).collect::<Vec<_>>(); let spans = inexistent_fields.iter().map(|(span, _)| *span).collect::<Vec<_>>();
let mut err = struct_span_err!(tcx.sess, let mut err = struct_span_err!(tcx.sess,
@ -955,12 +955,13 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
kind_name, kind_name,
tcx.item_path_str(variant.did), tcx.item_path_str(variant.did),
field_names); field_names);
for (span, name) in &inexistent_fields { if let Some((span, _)) = inexistent_fields.last() {
err.span_label(*span, err.span_label(*span,
format!("{} `{}` does not have field `{}`", format!("{} `{}` does not have {} field{}",
kind_name, kind_name,
tcx.item_path_str(variant.did), tcx.item_path_str(variant.did),
name)); t,
plural));
} }
if tcx.sess.teach(&err.get_code().unwrap()) { if tcx.sess.teach(&err.get_code().unwrap()) {
err.note( err.note(

View File

@ -16,10 +16,8 @@ struct a {
impl a { impl a {
fn foo(&self) { fn foo(&self) {
let a { x, y } = self.d; //~ ERROR no field `d` on type `&a` let a { x, y } = self.d; //~ ERROR no field `d` on type `&a`
//~^ ERROR struct `a` does not have a field named `x` //~^ ERROR struct `a` does not have fields named `x`, `y`
//~^^ ERROR struct `a` does not have a field named `y` //~| ERROR pattern does not mention fields `b`, `c`
//~^^^ ERROR pattern does not mention field `b`
//~^^^^ ERROR pattern does not mention field `c`
} }
} }

View File

@ -2,7 +2,7 @@ error[E0026]: struct `Thing` does not have a field named `z`
--> $DIR/E0026-teach.rs:21:23 --> $DIR/E0026-teach.rs:21:23
| |
LL | Thing { x, y, z } => {} LL | Thing { x, y, z } => {}
| ^ struct `Thing` does not have field `z` | ^ struct `Thing` does not have this field
| |
= note: This error indicates that a struct pattern attempted to extract a non-existent field from a struct. Struct fields are identified by the name used before the colon : so struct patterns should resemble the declaration of the struct type being matched. = note: This error indicates that a struct pattern attempted to extract a non-existent field from a struct. Struct fields are identified by the name used before the colon : so struct patterns should resemble the declaration of the struct type being matched.

View File

@ -2,7 +2,7 @@ error[E0026]: struct `Thing` does not have a field named `z`
--> $DIR/E0026.rs:19:23 --> $DIR/E0026.rs:19:23
| |
LL | Thing { x, y, z } => {} LL | Thing { x, y, z } => {}
| ^ struct `Thing` does not have field `z` | ^ struct `Thing` does not have this field
error: aborting due to previous error error: aborting due to previous error

View File

@ -13,7 +13,7 @@ struct S(usize, usize, usize, usize);
fn main() { fn main() {
if let S { a, b, c, d } = S(1, 2, 3, 4) { if let S { a, b, c, d } = S(1, 2, 3, 4) {
//~^ ERROR struct `S` does not have fields named `a`, `b`, `c`, `d` [E0026] //~^ ERROR struct `S` does not have fields named `a`, `b`, `c`, `d` [E0026]
//~^ ERROR pattern does not mention fields `0`, `1`, `2`, `3` [E0027] //~| ERROR pattern does not mention fields `0`, `1`, `2`, `3` [E0027]
println!("hi"); println!("hi");
} }
} }

View File

@ -2,11 +2,7 @@ error[E0026]: struct `S` does not have fields named `a`, `b`, `c`, `d`
--> $DIR/missing-fields-in-struct-pattern.rs:14:16 --> $DIR/missing-fields-in-struct-pattern.rs:14:16
| |
LL | if let S { a, b, c, d } = S(1, 2, 3, 4) { LL | if let S { a, b, c, d } = S(1, 2, 3, 4) {
| ^ ^ ^ ^ struct `S` does not have field `d` | ^ ^ ^ ^ struct `S` does not have these fields
| | | |
| | | struct `S` does not have field `c`
| | struct `S` does not have field `b`
| struct `S` does not have field `a`
error[E0027]: pattern does not mention fields `0`, `1`, `2`, `3` error[E0027]: pattern does not mention fields `0`, `1`, `2`, `3`
--> $DIR/missing-fields-in-struct-pattern.rs:14:12 --> $DIR/missing-fields-in-struct-pattern.rs:14:12

View File

@ -10,7 +10,7 @@ error[E0026]: struct `S` does not have a field named `0x1`
--> $DIR/numeric-fields.rs:17:17 --> $DIR/numeric-fields.rs:17:17
| |
LL | S{0: a, 0x1: b, ..} => {} LL | S{0: a, 0x1: b, ..} => {}
| ^^^^^^ struct `S` does not have field `0x1` | ^^^^^^ struct `S` does not have this field
error: aborting due to 2 previous errors error: aborting due to 2 previous errors

View File

@ -2,7 +2,7 @@ error[E0026]: variant `X::Y` does not have a field named `number`
--> $DIR/issue-41314.rs:17:16 --> $DIR/issue-41314.rs:17:16
| |
LL | X::Y { number } => {} //~ ERROR does not have a field named `number` LL | X::Y { number } => {} //~ ERROR does not have a field named `number`
| ^^^^^^ variant `X::Y` does not have field `number` | ^^^^^^ variant `X::Y` does not have this field
error[E0027]: pattern does not mention field `0` error[E0027]: pattern does not mention field `0`
--> $DIR/issue-41314.rs:17:9 --> $DIR/issue-41314.rs:17:9

View File

@ -52,7 +52,7 @@ error[E0026]: union `U` does not have a field named `c`
--> $DIR/union-fields-2.rs:28:19 --> $DIR/union-fields-2.rs:28:19
| |
LL | let U { a, b, c } = u; //~ ERROR union patterns should have exactly one field LL | let U { a, b, c } = u; //~ ERROR union patterns should have exactly one field
| ^ union `U` does not have field `c` | ^ union `U` does not have this field
error: union patterns should have exactly one field error: union patterns should have exactly one field
--> $DIR/union-fields-2.rs:28:9 --> $DIR/union-fields-2.rs:28:9