]> git.lizzy.rs Git - rust.git/commitdiff
review comment
authorEsteban Küber <esteban@kuber.com.ar>
Thu, 5 Sep 2019 06:59:04 +0000 (23:59 -0700)
committerEsteban Küber <esteban@kuber.com.ar>
Thu, 5 Sep 2019 07:01:37 +0000 (00:01 -0700)
src/librustc_typeck/check/pat.rs

index 9a3f5e9e1b5d835718219ca798b14f071ac1ee6a..24d0659391b040146b17adaae5e67f9a3671f267 100644 (file)
@@ -675,23 +675,39 @@ fn check_pat_tuple_struct(
                 self.tcx.check_stability(variant.fields[i].did, Some(pat.hir_id), subpat.span);
             }
         } else {
-            let subpats_ending = if subpats.len() == 1 { "" } else { "s" };
-            let fields_ending = if variant.fields.len() == 1 { "" } else { "s" };
-            let span = tcx.def_span(res.def_id());
-            struct_span_err!(tcx.sess, pat.span, E0023,
-                             "this pattern has {} field{}, but the corresponding {} has {} field{}",
-                             subpats.len(), subpats_ending, res.descr(),
-                             variant.fields.len(),  fields_ending)
-                .span_label(pat.span, format!("expected {} field{}, found {}",
-                                              variant.fields.len(), fields_ending, subpats.len()))
-                .span_label(span, format!("{} defined here", res.descr()))
-                .emit();
+            // Pattern has wrong number of fields.
+            self.e0023(pat.span, res, &subpats, &variant.fields);
             on_error();
             return tcx.types.err;
         }
         pat_ty
     }
 
+    fn e0023(&self, pat_span: Span, res: Res, subpats: &'tcx [P<Pat>], fields: &[ty::FieldDef]) {
+        let subpats_ending = if subpats.len() == 1 { "" } else { "s" };
+        let fields_ending = if fields.len() == 1 { "" } else { "s" };
+        let res_span = self.tcx.def_span(res.def_id());
+        struct_span_err!(
+            self.tcx.sess,
+            pat_span,
+            E0023,
+            "this pattern has {} field{}, but the corresponding {} has {} field{}",
+            subpats.len(),
+            subpats_ending,
+            res.descr(),
+            fields.len(),
+            fields_ending,
+        )
+            .span_label(pat_span, format!(
+                "expected {} field{}, found {}",
+                fields.len(),
+                fields_ending,
+                subpats.len(),
+            ))
+            .span_label(res_span, format!("{} defined here", res.descr()))
+            .emit();
+    }
+
     fn check_pat_tuple(
         &self,
         span: Span,