Add support for suggesting as_ref to Result accesses

This commit is contained in:
Esteban Küber 2019-05-24 19:30:25 -07:00
parent 4b0963653e
commit 1cc42ea675
4 changed files with 54 additions and 3 deletions

View file

@ -319,10 +319,16 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> {
original_path.ty(self.mir, self.infcx.tcx).ty,
);
let snippet = self.infcx.tcx.sess.source_map().span_to_snippet(span).unwrap();
if orig_path_ty.starts_with("std::option::Option") {
let is_option = orig_path_ty.starts_with("std::option::Option");
let is_result = orig_path_ty.starts_with("std::result::Result");
if is_option || is_result {
err.span_suggestion(
span,
"consider borrowing the `Option`'s content",
&format!("consider borrowing the `{}`'s content", if is_option {
"Option"
} else {
"Result"
}),
format!("{}.as_ref()", snippet),
Applicability::MaybeIncorrect,
);

View file

@ -18,4 +18,22 @@ impl LipogramCorpora {
}
}
pub struct LipogramCorpora2 {
selections: Vec<(char, Result<String, String>)>,
}
impl LipogramCorpora2 {
pub fn validate_all(&mut self) -> Result<(), char> {
for selection in &self.selections {
if selection.1.is_ok() {
if selection.1.as_ref().unwrap().contains(selection.0) {
//~^ ERROR cannot move out of borrowed content
return Err(selection.0);
}
}
}
Ok(())
}
}
fn main() {}

View file

@ -18,4 +18,22 @@ impl LipogramCorpora {
}
}
pub struct LipogramCorpora2 {
selections: Vec<(char, Result<String, String>)>,
}
impl LipogramCorpora2 {
pub fn validate_all(&mut self) -> Result<(), char> {
for selection in &self.selections {
if selection.1.is_ok() {
if selection.1.unwrap().contains(selection.0) {
//~^ ERROR cannot move out of borrowed content
return Err(selection.0);
}
}
}
Ok(())
}
}
fn main() {}

View file

@ -7,6 +7,15 @@ LL | if selection.1.unwrap().contains(selection.0) {
| cannot move out of borrowed content
| help: consider borrowing the `Option`'s content: `selection.1.as_ref()`
error: aborting due to previous error
error[E0507]: cannot move out of borrowed content
--> $DIR/option-content-move.rs:29:20
|
LL | if selection.1.unwrap().contains(selection.0) {
| ^^^^^^^^^^^
| |
| cannot move out of borrowed content
| help: consider borrowing the `Result`'s content: `selection.1.as_ref()`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0507`.