about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-03-19 14:13:57 -0700
committerEsteban Küber <esteban@kuber.com.ar>2018-03-19 19:59:34 -0700
commit062a46fdd1d49b1ccdc4f713433521463224d7d9 (patch)
treeafc20a219a4a1071ed974fb23f311f5cec933be0
parentf332a9ce5676859f0f07c4d6bf2d2c415be67066 (diff)
downloadrust-062a46fdd1d49b1ccdc4f713433521463224d7d9.tar.gz
rust-062a46fdd1d49b1ccdc4f713433521463224d7d9.zip
Reduce diagnostic verbosity by removing labels
-rw-r--r--src/librustc_typeck/check/_match.rs17
-rw-r--r--src/test/compile-fail/struct-pat-derived-error.rs6
-rw-r--r--src/test/ui/error-codes/E0026-teach.stderr2
-rw-r--r--src/test/ui/error-codes/E0026.stderr2
-rw-r--r--src/test/ui/missing-fields-in-struct-pattern.rs2
-rw-r--r--src/test/ui/missing-fields-in-struct-pattern.stderr6
-rw-r--r--src/test/ui/numeric-fields.stderr2
-rw-r--r--src/test/ui/type-check/issue-41314.stderr2
-rw-r--r--src/test/ui/union/union-fields-2.stderr2
9 files changed, 18 insertions, 23 deletions
diff --git a/src/librustc_typeck/check/_match.rs b/src/librustc_typeck/check/_match.rs
index cc72a565ba2..7965806af5d 100644
--- a/src/librustc_typeck/check/_match.rs
+++ b/src/librustc_typeck/check/_match.rs
@@ -938,14 +938,14 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
         }
 
         if inexistent_fields.len() > 0 {
-            let field_names = if inexistent_fields.len() == 1 {
-                format!("a field named `{}`", inexistent_fields[0].1)
+            let (field_names, t, plural) = if inexistent_fields.len() == 1 {
+                (format!("a field named `{}`", inexistent_fields[0].1), "this", "")
             } else {
-                format!("fields named {}",
-                        inexistent_fields.iter()
+                (format!("fields named {}",
+                         inexistent_fields.iter()
                             .map(|(_, name)| format!("`{}`", name))
                             .collect::<Vec<String>>()
-                            .join(", "))
+                            .join(", ")), "these", "s")
             };
             let spans = inexistent_fields.iter().map(|(span, _)| *span).collect::<Vec<_>>();
             let mut err = struct_span_err!(tcx.sess,
@@ -955,12 +955,13 @@ https://doc.rust-lang.org/reference/types.html#trait-objects");
                                            kind_name,
                                            tcx.item_path_str(variant.did),
                                            field_names);
-            for (span, name) in &inexistent_fields {
+            if let Some((span, _)) = inexistent_fields.last() {
                 err.span_label(*span,
-                               format!("{} `{}` does not have field `{}`",
+                               format!("{} `{}` does not have {} field{}",
                                        kind_name,
                                        tcx.item_path_str(variant.did),
-                                       name));
+                                       t,
+                                       plural));
             }
             if tcx.sess.teach(&err.get_code().unwrap()) {
                 err.note(
diff --git a/src/test/compile-fail/struct-pat-derived-error.rs b/src/test/compile-fail/struct-pat-derived-error.rs
index f525ec37375..d3130c4e831 100644
--- a/src/test/compile-fail/struct-pat-derived-error.rs
+++ b/src/test/compile-fail/struct-pat-derived-error.rs
@@ -16,10 +16,8 @@ struct a {
 impl a {
     fn foo(&self) {
         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 a field named `y`
-        //~^^^ ERROR pattern does not mention field `b`
-        //~^^^^ ERROR pattern does not mention field `c`
+        //~^ ERROR struct `a` does not have fields named `x`, `y`
+        //~| ERROR pattern does not mention fields `b`, `c`
     }
 }
 
diff --git a/src/test/ui/error-codes/E0026-teach.stderr b/src/test/ui/error-codes/E0026-teach.stderr
index 63d072fe03d..67ea32fba86 100644
--- a/src/test/ui/error-codes/E0026-teach.stderr
+++ b/src/test/ui/error-codes/E0026-teach.stderr
@@ -2,7 +2,7 @@ error[E0026]: struct `Thing` does not have a field named `z`
   --> $DIR/E0026-teach.rs:21:23
    |
 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.
            
diff --git a/src/test/ui/error-codes/E0026.stderr b/src/test/ui/error-codes/E0026.stderr
index af851951127..9dabbc8a775 100644
--- a/src/test/ui/error-codes/E0026.stderr
+++ b/src/test/ui/error-codes/E0026.stderr
@@ -2,7 +2,7 @@ error[E0026]: struct `Thing` does not have a field named `z`
   --> $DIR/E0026.rs:19:23
    |
 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
 
diff --git a/src/test/ui/missing-fields-in-struct-pattern.rs b/src/test/ui/missing-fields-in-struct-pattern.rs
index 28ed151b986..dfde3799499 100644
--- a/src/test/ui/missing-fields-in-struct-pattern.rs
+++ b/src/test/ui/missing-fields-in-struct-pattern.rs
@@ -13,7 +13,7 @@ struct S(usize, usize, usize, usize);
 fn main() {
     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 pattern does not mention fields `0`, `1`, `2`, `3` [E0027]
+    //~| ERROR pattern does not mention fields `0`, `1`, `2`, `3` [E0027]
         println!("hi");
     }
 }
diff --git a/src/test/ui/missing-fields-in-struct-pattern.stderr b/src/test/ui/missing-fields-in-struct-pattern.stderr
index 88fba19d14e..d1c3260f11e 100644
--- a/src/test/ui/missing-fields-in-struct-pattern.stderr
+++ b/src/test/ui/missing-fields-in-struct-pattern.stderr
@@ -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
    |
 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 field `c`
-   |                |  struct `S` does not have field `b`
-   |                struct `S` does not have field `a`
+   |                ^  ^  ^  ^ struct `S` does not have these fields
 
 error[E0027]: pattern does not mention fields `0`, `1`, `2`, `3`
   --> $DIR/missing-fields-in-struct-pattern.rs:14:12
diff --git a/src/test/ui/numeric-fields.stderr b/src/test/ui/numeric-fields.stderr
index 607980ba3bf..68a87da8ded 100644
--- a/src/test/ui/numeric-fields.stderr
+++ b/src/test/ui/numeric-fields.stderr
@@ -10,7 +10,7 @@ error[E0026]: struct `S` does not have a field named `0x1`
   --> $DIR/numeric-fields.rs:17:17
    |
 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
 
diff --git a/src/test/ui/type-check/issue-41314.stderr b/src/test/ui/type-check/issue-41314.stderr
index bcb0f9a99a7..f7d4bb9a02f 100644
--- a/src/test/ui/type-check/issue-41314.stderr
+++ b/src/test/ui/type-check/issue-41314.stderr
@@ -2,7 +2,7 @@ error[E0026]: variant `X::Y` does not have a field named `number`
   --> $DIR/issue-41314.rs:17:16
    |
 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`
   --> $DIR/issue-41314.rs:17:9
diff --git a/src/test/ui/union/union-fields-2.stderr b/src/test/ui/union/union-fields-2.stderr
index 3ea4d3426da..cfb5bc7520b 100644
--- a/src/test/ui/union/union-fields-2.stderr
+++ b/src/test/ui/union/union-fields-2.stderr
@@ -52,7 +52,7 @@ error[E0026]: union `U` does not have a field named `c`
   --> $DIR/union-fields-2.rs:28:19
    |
 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
   --> $DIR/union-fields-2.rs:28:9