Make IndexMut
note apply to more cases
Previously it was only emitted for assigments, which was an unnecessary restriction. Now it doesn't care where the mutability comes from. This commit also adds `` quotes around the printed type.
This commit is contained in:
parent
9d59c6b76e
commit
764d472b1f
@ -882,28 +882,6 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
// We add a special note about `IndexMut`, if the source of this error
|
||||
// is the fact that `Index` is implemented, but `IndexMut` is not. Needing
|
||||
// to implement two traits for "one operator" is not very intuitive for
|
||||
// many programmers.
|
||||
if err.cmt.note == mc::NoteIndex {
|
||||
let node_id = self.tcx.hir.hir_to_node_id(err.cmt.hir_id);
|
||||
let node = self.tcx.hir.get(node_id);
|
||||
|
||||
// This pattern probably always matches.
|
||||
if let hir_map::NodeExpr(
|
||||
hir::Expr { node: hir::ExprKind::Index(lhs, _), ..}
|
||||
) = node {
|
||||
let ty = self.tables.expr_ty(lhs);
|
||||
|
||||
db.help(&format!(
|
||||
"trait `IndexMut` is required to modify indexed content, but \
|
||||
it is not implemented for {}",
|
||||
ty
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
db
|
||||
}
|
||||
BorrowViolation(euv::ClosureCapture(_)) => {
|
||||
@ -924,6 +902,28 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
|
||||
}
|
||||
};
|
||||
|
||||
// We add a special note about `IndexMut`, if the source of this error
|
||||
// is the fact that `Index` is implemented, but `IndexMut` is not. Needing
|
||||
// to implement two traits for "one operator" is not very intuitive for
|
||||
// many programmers.
|
||||
if err.cmt.note == mc::NoteIndex {
|
||||
let node_id = self.tcx.hir.hir_to_node_id(err.cmt.hir_id);
|
||||
let node = self.tcx.hir.get(node_id);
|
||||
|
||||
// This pattern probably always matches.
|
||||
if let hir_map::NodeExpr(
|
||||
hir::Expr { node: hir::ExprKind::Index(lhs, _), ..}
|
||||
) = node {
|
||||
let ty = self.tables.expr_ty(lhs);
|
||||
|
||||
db.help(&format!(
|
||||
"trait `IndexMut` is required to modify indexed content, but \
|
||||
it is not implemented for `{}`",
|
||||
ty
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
self.note_and_explain_mutbl_error(&mut db, &err, &error_span);
|
||||
self.note_immutability_blame(
|
||||
&mut db,
|
||||
|
Loading…
Reference in New Issue
Block a user