mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-30 14:52:56 +03:00
Do not suggest borrow that is already there in fully-qualified call
When encountering `&str::from("value")` do not suggest `&&str::from("value")`.
Fix #132041.
This commit is contained in:
@@ -1195,6 +1195,15 @@ pub(super) fn suggest_add_reference_to_arg(
|
||||
c @ ObligationCauseCode::WhereClauseInExpr(_, _, hir_id, _)
|
||||
if self.tcx.hir_span(*hir_id).lo() == span.lo() =>
|
||||
{
|
||||
if let hir::Node::Expr(expr) = self.tcx.parent_hir_node(*hir_id)
|
||||
&& let hir::ExprKind::Call(base, _) = expr.kind
|
||||
&& let hir::ExprKind::Path(hir::QPath::TypeRelative(ty, _)) = base.kind
|
||||
&& ty.span == span
|
||||
{
|
||||
// Do not suggest borrowing when we already do so. This would happen with
|
||||
// `let _ = &str::from("");` where the expression corresponds to the `str`.
|
||||
return false;
|
||||
}
|
||||
c
|
||||
}
|
||||
c if matches!(
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
fn main() {
|
||||
let _ = &str::from("value");
|
||||
//~^ ERROR the trait bound `str: From<_>` is not satisfied
|
||||
//~| ERROR the size for values of type `str` cannot be known at compilation time
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
error[E0277]: the trait bound `str: From<_>` is not satisfied
|
||||
--> $DIR/dont-suggest-borrowing-existing-borrow.rs:2:14
|
||||
|
|
||||
LL | let _ = &str::from("value");
|
||||
| ^^^ the trait `From<_>` is not implemented for `str`
|
||||
|
|
||||
= help: the following other types implement trait `From<T>`:
|
||||
`String` implements `From<&String>`
|
||||
`String` implements `From<&mut str>`
|
||||
`String` implements `From<&str>`
|
||||
`String` implements `From<Box<str>>`
|
||||
`String` implements `From<Cow<'_, str>>`
|
||||
`String` implements `From<char>`
|
||||
|
||||
error[E0277]: the size for values of type `str` cannot be known at compilation time
|
||||
--> $DIR/dont-suggest-borrowing-existing-borrow.rs:2:14
|
||||
|
|
||||
LL | let _ = &str::from("value");
|
||||
| ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
||||
|
|
||||
= help: the trait `Sized` is not implemented for `str`
|
||||
= note: the return type of a function must have a statically known size
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
Reference in New Issue
Block a user