]> git.lizzy.rs Git - rust.git/commitdiff
Add new error codes in librustc_typeck
authorggomez <guillaume1.gomez@gmail.com>
Thu, 21 Jul 2016 14:07:08 +0000 (16:07 +0200)
committerAriel Ben-Yehuda <ariel.byd@gmail.com>
Fri, 22 Jul 2016 19:47:38 +0000 (22:47 +0300)
src/librustc/infer/mod.rs
src/librustc_typeck/check/mod.rs
src/librustc_typeck/diagnostics.rs

index fd65e06ea972c7ff7dcfd54b5c453aac1abe0c63..1df06e8a00736c471111b7592a7252a110174c1c 100644 (file)
@@ -1510,6 +1510,7 @@ pub fn type_error_message<M>(&self,
         self.type_error_struct(sp, mk_msg, actual_ty).emit();
     }
 
+    // FIXME: this results in errors without an error code. Deprecate?
     pub fn type_error_struct<M>(&self,
                                 sp: Span,
                                 mk_msg: M,
@@ -1517,19 +1518,27 @@ pub fn type_error_struct<M>(&self,
                                 -> DiagnosticBuilder<'tcx>
         where M: FnOnce(String) -> String,
     {
-        debug!("type_error_struct({:?}, {:?})", sp, actual_ty);
+        self.type_error_struct_with_diag(sp, |actual_ty| {
+            self.tcx.sess.struct_span_err(sp, &mk_msg(actual_ty))
+        }, actual_ty)
+    }
 
+    pub fn type_error_struct_with_diag<M>(&self,
+                                          sp: Span,
+                                          mk_diag: M,
+                                          actual_ty: Ty<'tcx>)
+                                          -> DiagnosticBuilder<'tcx>
+        where M: FnOnce(String) -> DiagnosticBuilder<'tcx>,
+    {
         let actual_ty = self.resolve_type_vars_if_possible(&actual_ty);
+        debug!("type_error_struct_with_diag({:?}, {:?})", sp, actual_ty);
 
         // Don't report an error if actual type is TyError.
         if actual_ty.references_error() {
             return self.tcx.sess.diagnostic().struct_dummy();
         }
 
-        let msg = mk_msg(self.ty_to_string(actual_ty));
-
-        // FIXME: use an error code.
-        self.tcx.sess.struct_span_err(sp, &msg)
+        mk_diag(self.ty_to_string(actual_ty))
     }
 
     pub fn report_mismatched_types(&self,
index c01edc568afd0547cfdb4ea71877e840ac7c1238..6062bd048b3d27f8972edfbdce5efa766c448aab 100644 (file)
@@ -3028,14 +3028,16 @@ fn report_unknown_field(&self,
                             variant: ty::VariantDef<'tcx>,
                             field: &hir::Field,
                             skip_fields: &[hir::Field]) {
-        let mut err = self.type_error_struct(
+        let mut err = self.type_error_struct_with_diag(
             field.name.span,
             |actual| if let ty::TyEnum(..) = ty.sty {
-                format!("struct variant `{}::{}` has no field named `{}`",
-                        actual, variant.name.as_str(), field.name.node)
+                struct_span_err!(self.tcx.sess, field.name.span, E0559,
+                                 "struct variant `{}::{}` has no field named `{}`",
+                                 actual, variant.name.as_str(), field.name.node)
             } else {
-                format!("structure `{}` has no field named `{}`",
-                        actual, field.name.node)
+                struct_span_err!(self.tcx.sess, field.name.span, E0560,
+                                 "structure `{}` has no field named `{}`",
+                                 actual, field.name.node)
             },
             ty);
         // prevent all specified fields from being suggested
index 38bf869119c6a742b04c365828bf8e616047fc13..6000ea71bff8ec9ec2f9e5b3af5289bca6e91872 100644 (file)
@@ -4053,4 +4053,6 @@ fn fly(&self) {} // And now that's ok!
     E0528, // expected at least {} elements, found {}
     E0529, // slice pattern expects array or slice, not `{}`
     E0533, // `{}` does not name a unit variant, unit struct or a constant
+    E0559,
+    E0560,
 }