let source_map = self.tcx.sess.source_map();
match is_assign {
IsAssign::Yes => {
- let mut err = struct_span_err!(self.tcx.sess, expr.span, E0368,
- "binary assignment operation `{}=` \
- cannot be applied to type `{}`",
- op.node.as_str(),
- lhs_ty);
- err.span_label(lhs_expr.span,
- format!("cannot use `{}=` on type `{}`",
- op.node.as_str(), lhs_ty));
+ let mut err = struct_span_err!(
+ self.tcx.sess,
+ expr.span,
+ E0368,
+ "binary assignment operation `{}=` cannot be applied to type `{}`",
+ op.node.as_str(),
+ lhs_ty,
+ );
+ err.span_label(
+ lhs_expr.span,
+ format!("cannot use `{}=` on type `{}`",
+ op.node.as_str(), lhs_ty),
+ );
let mut suggested_deref = false;
if let Ref(_, mut rty, _) = lhs_ty.sty {
if {
rty = rty_inner;
}
let msg = &format!(
- "`{}=` can be used on '{}', you can \
- dereference `{2}`: `*{2}`",
- op.node.as_str(),
- rty,
- lstring
+ "`{}=` can be used on '{}', you can dereference `{}`",
+ op.node.as_str(),
+ rty,
+ lstring,
+ );
+ err.span_suggestion_with_applicability(
+ lhs_expr.span,
+ msg,
+ format!("*{}", lstring),
+ errors::Applicability::MachineApplicable,
);
- err.help(msg);
suggested_deref = true;
}
}
| -^^^^^
| |
| cannot use `+=` on type `&isize`
+help: `+=` can be used on 'isize', you can dereference `x`
|
- = help: `+=` can be used on 'isize', you can dereference `x`: `*x`
+LL | let x = |ref x: isize| { *x += 1; };
+ | ^^
error: aborting due to previous error