// highlighted text will always be `&<expr>` and
// thus can transform to `&mut` by slicing off
// first ASCII character and prepending "&mut ".
- let borrowed_expr = src[1..].to_string();
- return (assignment_rhs_span, format!("&mut {}", borrowed_expr));
+ if src.starts_with('&') {
+ let borrowed_expr = src[1..].to_string();
+ return (assignment_rhs_span, format!("&mut {}", borrowed_expr));
+ }
}
}
fn main() {
let foo = &16;
+ //~^ HELP consider changing this to be a mutable reference
+ //~| SUGGESTION &mut 16
*foo = 32;
+ //~^ ERROR cannot assign to `*foo` which is behind a `&` reference
let bar = foo;
+ //~^ HELP consider changing this to be a mutable reference
+ //~| SUGGESTION &mut i32
*bar = 64;
+ //~^ ERROR cannot assign to `*bar` which is behind a `&` reference
}
error[E0594]: cannot assign to `*foo` which is behind a `&` reference
- --> $DIR/issue-51515.rs:15:5
+ --> $DIR/issue-51515.rs:17:5
|
LL | let foo = &16;
| --- help: consider changing this to be a mutable reference: `&mut 16`
+...
LL | *foo = 32;
| ^^^^^^^^^ `foo` is a `&` reference, so the data it refers to cannot be written
error[E0594]: cannot assign to `*bar` which is behind a `&` reference
- --> $DIR/issue-51515.rs:17:5
+ --> $DIR/issue-51515.rs:22:5
|
+LL | let bar = foo;
+ | --- help: consider changing this to be a mutable reference: `&mut i32`
+...
LL | *bar = 64;
| ^^^^^^^^^ `bar` is a `&` reference, so the data it refers to cannot be written