Skip to content

Commit 9fcb6a2

Browse files
committed
Display better error messages for E0282
1 parent 3d069e1 commit 9fcb6a2

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/librustc/traits/error_reporting.rs

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -827,12 +827,26 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
827827

828828

829829
fn need_type_info(&self, span: Span, ty: Ty<'tcx>) {
830+
let ty = self.resolve_type_vars_if_possible(&ty);
831+
let name = if let ty::TyInfer(ty::TyVar(ty_vid)) = ty.sty {
832+
let ty_vars = self.type_variables.borrow();
833+
if let TypeVariableOrigin::TypeParameterDefinition(_, name) =
834+
*ty_vars.var_origin(ty_vid)
835+
{
836+
name.to_string()
837+
} else {
838+
ty.to_string()
839+
}
840+
} else {
841+
ty.to_string()
842+
};
843+
830844
let mut err = struct_span_err!(self.tcx.sess, span, E0282,
831845
"unable to infer enough type information about `{}`",
832-
ty);
846+
name);
833847
err.note("type annotations or generic parameter binding required");
834-
err.span_label(span, &format!("cannot infer type for `{}`", ty));
835-
err.emit()
848+
err.span_label(span, &format!("cannot infer type for `{}`", name));
849+
err.emit();
836850
}
837851

838852
fn note_obligation_cause<T>(&self,

0 commit comments

Comments
 (0)