Add new error codes in librustc_typeck
This commit is contained in:
parent
93a96835b0
commit
e76a46a10d
3 changed files with 23 additions and 10 deletions
|
|
@ -1510,6 +1510,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
|||
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 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
|||
-> 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,
|
||||
|
|
|
|||
|
|
@ -3028,14 +3028,16 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
|||
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
|
||||
|
|
|
|||
|
|
@ -4053,4 +4053,6 @@ register_diagnostics! {
|
|||
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,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue