Avoid source-map call in operator error
This commit is contained in:
parent
c2804e6ec2
commit
00c9d3d2ee
@ -313,7 +313,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
// error types are considered "builtin"
|
||||
Err(_) if lhs_ty.references_error() || rhs_ty.references_error() => self.tcx.ty_error(),
|
||||
Err(errors) => {
|
||||
let source_map = self.tcx.sess.source_map();
|
||||
let (mut err, missing_trait, use_output) = match is_assign {
|
||||
IsAssign::Yes => {
|
||||
let mut err = struct_span_err!(
|
||||
@ -448,24 +447,21 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||
)
|
||||
.is_ok()
|
||||
{
|
||||
if let Ok(lstring) = source_map.span_to_snippet(lhs_expr.span) {
|
||||
let msg = &format!(
|
||||
"`{}{}` can be used on `{}`, you can dereference `{}`",
|
||||
op.node.as_str(),
|
||||
match is_assign {
|
||||
IsAssign::Yes => "=",
|
||||
IsAssign::No => "",
|
||||
},
|
||||
lhs_deref_ty.peel_refs(),
|
||||
lstring,
|
||||
);
|
||||
err.span_suggestion_verbose(
|
||||
lhs_expr.span.shrink_to_lo(),
|
||||
msg,
|
||||
"*",
|
||||
rustc_errors::Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
let msg = &format!(
|
||||
"`{}{}` can be used on `{}` if you dereference the left-hand side",
|
||||
op.node.as_str(),
|
||||
match is_assign {
|
||||
IsAssign::Yes => "=",
|
||||
IsAssign::No => "",
|
||||
},
|
||||
lhs_deref_ty,
|
||||
);
|
||||
err.span_suggestion_verbose(
|
||||
lhs_expr.span.shrink_to_lo(),
|
||||
msg,
|
||||
"*",
|
||||
rustc_errors::Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -6,7 +6,7 @@ LL | x % 2 == 0
|
||||
| |
|
||||
| &&{integer}
|
||||
|
|
||||
help: `%` can be used on `{integer}`, you can dereference `x`
|
||||
help: `%` can be used on `&{integer}` if you dereference the left-hand side
|
||||
|
|
||||
LL | *x % 2 == 0
|
||||
| +
|
||||
|
@ -19,7 +19,7 @@ LL | x.lock().unwrap() += 1;
|
||||
| |
|
||||
| cannot use `+=` on type `MutexGuard<'_, usize>`
|
||||
|
|
||||
help: `+=` can be used on `usize`, you can dereference `x.lock().unwrap()`
|
||||
help: `+=` can be used on `usize` if you dereference the left-hand side
|
||||
|
|
||||
LL | *x.lock().unwrap() += 1;
|
||||
| +
|
||||
@ -47,7 +47,7 @@ LL | y += 1;
|
||||
| |
|
||||
| cannot use `+=` on type `MutexGuard<'_, usize>`
|
||||
|
|
||||
help: `+=` can be used on `usize`, you can dereference `y`
|
||||
help: `+=` can be used on `usize` if you dereference the left-hand side
|
||||
|
|
||||
LL | *y += 1;
|
||||
| +
|
||||
|
@ -19,7 +19,7 @@ LL | x.last_mut().unwrap() += 1;
|
||||
| |
|
||||
| cannot use `+=` on type `&mut usize`
|
||||
|
|
||||
help: `+=` can be used on `usize`, you can dereference `x.last_mut().unwrap()`
|
||||
help: `+=` can be used on `usize` if you dereference the left-hand side
|
||||
|
|
||||
LL | *x.last_mut().unwrap() += 1;
|
||||
| +
|
||||
@ -45,7 +45,7 @@ LL | y += 1;
|
||||
| |
|
||||
| cannot use `+=` on type `&mut usize`
|
||||
|
|
||||
help: `+=` can be used on `usize`, you can dereference `y`
|
||||
help: `+=` can be used on `usize` if you dereference the left-hand side
|
||||
|
|
||||
LL | *y += 1;
|
||||
| +
|
||||
|
Loading…
x
Reference in New Issue
Block a user