1
Fork 0

Use structured suggestion for impl T to Box<dyn T>

This commit is contained in:
Esteban Küber 2020-08-17 19:04:27 -07:00
parent d778203da2
commit c8ee33714b
4 changed files with 50 additions and 34 deletions

View file

@ -37,7 +37,7 @@
use crate::astconv::AstConv;
use crate::check::FnCtxt;
use rustc_errors::{struct_span_err, DiagnosticBuilder};
use rustc_errors::{struct_span_err, Applicability, DiagnosticBuilder};
use rustc_hir as hir;
use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
use rustc_infer::infer::{Coercion, InferOk, InferResult};
@ -1523,10 +1523,12 @@ impl<'tcx, 'exprs, E: AsCoercionSite> CoerceMany<'tcx, 'exprs, E> {
};
if has_impl {
if is_object_safe {
err.help(&format!(
"you can instead return a boxed trait object using `Box<dyn {}>`",
&snippet[5..]
));
err.span_suggestion_verbose(
return_sp,
"you could change the return type to be a boxed trait object",
format!("Box<dyn {}>", &snippet[5..]),
Applicability::MachineApplicable,
);
} else {
err.help(&format!(
"if the trait `{}` were object safe, you could return a boxed trait object",