Auto merge of #5481 - sinkuu:no_as_ref, r=phansch

question_mark: don't add `as_ref()` for a call expression

If a call returns a `!Copy` value, it does so regardless of whether `as_ref()` is added. For example, `foo.into_option().as_ref()?` can be simplified to `foo.into_option()?`.

---

changelog: Improved `question_mark` lint suggestion so that it doesn't add redundant `as_ref()`
This commit is contained in:
bors 2020-04-17 06:19:47 +00:00
commit 82be9dc606
4 changed files with 40 additions and 4 deletions

View file

@ -70,10 +70,12 @@ impl QuestionMark {
replacement = Some(format!("Some({}?)", receiver_str));
}
}
} else if Self::moves_by_default(cx, subject) {
replacement = Some(format!("{}.as_ref()?;", receiver_str));
} else if Self::moves_by_default(cx, subject)
&& !matches!(subject.kind, ExprKind::Call(..) | ExprKind::MethodCall(..))
{
replacement = Some(format!("{}.as_ref()?;", receiver_str));
} else {
replacement = Some(format!("{}?;", receiver_str));
replacement = Some(format!("{}?;", receiver_str));
}
if let Some(replacement_str) = replacement {