Check equivalence of indices in more cases

This commit is contained in:
Esteban Küber 2024-04-24 21:53:33 +00:00
parent ad6ae61246
commit abdb64d4ea
2 changed files with 10 additions and 7 deletions

View File

@ -2116,7 +2116,13 @@ fn suggest_slice_method_if_applicable(
None
}
}) else {
note_default_suggestion();
let hir::Node::Expr(parent) = tcx.parent_hir_node(index1.hir_id) else { return };
let hir::ExprKind::Index(_, idx1, _) = parent.kind else { return };
let hir::Node::Expr(parent) = tcx.parent_hir_node(index2.hir_id) else { return };
let hir::ExprKind::Index(_, idx2, _) = parent.kind else { return };
if !idx1.equals(idx2) {
err.help("use `.split_at_mut(position)` to obtain two mutable non-overlapping sub-slices");
}
return;
};

View File

@ -8,8 +8,7 @@ LL | let b = &mut foo[3];
LL | *a = 5;
| ------ first borrow later used here
|
= help: consider using `.split_at_mut(position)` or similar method to obtain two mutable non-overlapping sub-slices
= help: consider using `.swap(index_1, index_2)` to swap elements at the specified indices
= help: use `.split_at_mut(position)` to obtain two mutable non-overlapping sub-slices
error[E0499]: cannot borrow `foo` as mutable more than once at a time
--> $DIR/suggest-split-at-mut.rs:13:18
@ -59,8 +58,7 @@ LL | *b = 6;
LL | println!("{:?} {:?}", a, b);
| - immutable borrow later used here
|
= help: consider using `.split_at_mut(position)` or similar method to obtain two mutable non-overlapping sub-slices
= help: consider using `.swap(index_1, index_2)` to swap elements at the specified indices
= help: use `.split_at_mut(position)` to obtain two mutable non-overlapping sub-slices
error[E0502]: cannot borrow `foo[_]` as immutable because it is also borrowed as mutable
--> $DIR/suggest-split-at-mut.rs:46:13
@ -72,8 +70,7 @@ LL | let b = &foo[2];
LL | *a = 5;
| ------ mutable borrow later used here
|
= help: consider using `.split_at_mut(position)` or similar method to obtain two mutable non-overlapping sub-slices
= help: consider using `.swap(index_1, index_2)` to swap elements at the specified indices
= help: use `.split_at_mut(position)` to obtain two mutable non-overlapping sub-slices
error[E0502]: cannot borrow `foo` as immutable because it is also borrowed as mutable
--> $DIR/suggest-split-at-mut.rs:54:14