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
1 changed files with 22 additions and 22 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue