suggestion-diagnostics: as_ref improve snippet
Improve the code snippet suggested in suggestion-diagnostics when suggesting the use of as_ref.
This commit is contained in:
parent
e544947278
commit
285d4a7eb6
2 changed files with 18 additions and 13 deletions
|
@ -210,7 +210,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||||
/// ```
|
/// ```
|
||||||
/// opt.map(|arg| { takes_ref(arg) });
|
/// opt.map(|arg| { takes_ref(arg) });
|
||||||
/// ```
|
/// ```
|
||||||
fn can_use_as_ref(&self, expr: &hir::Expr) -> Option<(Span, &'static str, String)> {
|
fn can_use_as_ref(
|
||||||
|
&self,
|
||||||
|
expr: &hir::Expr,
|
||||||
|
) -> Option<(Span, &'static str, String)> {
|
||||||
if let hir::ExprKind::Path(hir::QPath::Resolved(_, ref path)) = expr.node {
|
if let hir::ExprKind::Path(hir::QPath::Resolved(_, ref path)) = expr.node {
|
||||||
if let hir::def::Def::Local(id) = path.def {
|
if let hir::def::Def::Local(id) = path.def {
|
||||||
let parent = self.tcx.hir().get_parent_node(id);
|
let parent = self.tcx.hir().get_parent_node(id);
|
||||||
|
@ -233,10 +236,12 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||||
self_ty.starts_with("std::option::Option") ||
|
self_ty.starts_with("std::option::Option") ||
|
||||||
self_ty.starts_with("std::result::Result")
|
self_ty.starts_with("std::result::Result")
|
||||||
) && (name == "map" || name == "and_then");
|
) && (name == "map" || name == "and_then");
|
||||||
if is_as_ref_able {
|
match (is_as_ref_able, self.sess().source_map().span_to_snippet(*span)) {
|
||||||
return Some((span.shrink_to_lo(),
|
(true, Ok(src)) => {
|
||||||
"consider using `as_ref` instead",
|
return Some((*span, "consider using `as_ref` instead",
|
||||||
"as_ref().".into()));
|
format!("as_ref().{}", src)));
|
||||||
|
},
|
||||||
|
_ => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,9 @@ error[E0308]: mismatched types
|
||||||
--> $DIR/as-ref.rs:6:27
|
--> $DIR/as-ref.rs:6:27
|
||||||
|
|
|
|
||||||
LL | opt.map(|arg| takes_ref(arg));
|
LL | opt.map(|arg| takes_ref(arg));
|
||||||
| - ^^^ expected &Foo, found struct `Foo`
|
| --- ^^^ expected &Foo, found struct `Foo`
|
||||||
| |
|
| |
|
||||||
| help: consider using `as_ref` instead: `as_ref().`
|
| help: consider using `as_ref` instead: `as_ref().map`
|
||||||
|
|
|
|
||||||
= note: expected type `&Foo`
|
= note: expected type `&Foo`
|
||||||
found type `Foo`
|
found type `Foo`
|
||||||
|
@ -13,9 +13,9 @@ error[E0308]: mismatched types
|
||||||
--> $DIR/as-ref.rs:8:37
|
--> $DIR/as-ref.rs:8:37
|
||||||
|
|
|
|
||||||
LL | opt.and_then(|arg| Some(takes_ref(arg)));
|
LL | opt.and_then(|arg| Some(takes_ref(arg)));
|
||||||
| - ^^^ expected &Foo, found struct `Foo`
|
| -------- ^^^ expected &Foo, found struct `Foo`
|
||||||
| |
|
| |
|
||||||
| help: consider using `as_ref` instead: `as_ref().`
|
| help: consider using `as_ref` instead: `as_ref().and_then`
|
||||||
|
|
|
|
||||||
= note: expected type `&Foo`
|
= note: expected type `&Foo`
|
||||||
found type `Foo`
|
found type `Foo`
|
||||||
|
@ -24,9 +24,9 @@ error[E0308]: mismatched types
|
||||||
--> $DIR/as-ref.rs:11:27
|
--> $DIR/as-ref.rs:11:27
|
||||||
|
|
|
|
||||||
LL | opt.map(|arg| takes_ref(arg));
|
LL | opt.map(|arg| takes_ref(arg));
|
||||||
| - ^^^ expected &Foo, found struct `Foo`
|
| --- ^^^ expected &Foo, found struct `Foo`
|
||||||
| |
|
| |
|
||||||
| help: consider using `as_ref` instead: `as_ref().`
|
| help: consider using `as_ref` instead: `as_ref().map`
|
||||||
|
|
|
|
||||||
= note: expected type `&Foo`
|
= note: expected type `&Foo`
|
||||||
found type `Foo`
|
found type `Foo`
|
||||||
|
@ -35,9 +35,9 @@ error[E0308]: mismatched types
|
||||||
--> $DIR/as-ref.rs:13:35
|
--> $DIR/as-ref.rs:13:35
|
||||||
|
|
|
|
||||||
LL | opt.and_then(|arg| Ok(takes_ref(arg)));
|
LL | opt.and_then(|arg| Ok(takes_ref(arg)));
|
||||||
| - ^^^ expected &Foo, found struct `Foo`
|
| -------- ^^^ expected &Foo, found struct `Foo`
|
||||||
| |
|
| |
|
||||||
| help: consider using `as_ref` instead: `as_ref().`
|
| help: consider using `as_ref` instead: `as_ref().and_then`
|
||||||
|
|
|
|
||||||
= note: expected type `&Foo`
|
= note: expected type `&Foo`
|
||||||
found type `Foo`
|
found type `Foo`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue