Fix the issue of invalid suggestion for a reference of iterator
This commit is contained in:
parent
077d0da30a
commit
48ddf5e323
@ -466,7 +466,6 @@ fn suggest_dereferences(
|
|||||||
&& let Some(arg_ty) = typeck_results.expr_ty_adjusted_opt(expr)
|
&& let Some(arg_ty) = typeck_results.expr_ty_adjusted_opt(expr)
|
||||||
{
|
{
|
||||||
// Suggest dereferencing the argument to a function/method call if possible
|
// Suggest dereferencing the argument to a function/method call if possible
|
||||||
|
|
||||||
let mut real_trait_pred = trait_pred;
|
let mut real_trait_pred = trait_pred;
|
||||||
while let Some((parent_code, parent_trait_pred)) = code.parent() {
|
while let Some((parent_code, parent_trait_pred)) = code.parent() {
|
||||||
code = parent_code;
|
code = parent_code;
|
||||||
@ -553,6 +552,9 @@ fn suggest_dereferences(
|
|||||||
);
|
);
|
||||||
if self.predicate_may_hold(&obligation)
|
if self.predicate_may_hold(&obligation)
|
||||||
&& self.predicate_must_hold_modulo_regions(&sized_obligation)
|
&& self.predicate_must_hold_modulo_regions(&sized_obligation)
|
||||||
|
// Do not suggest * if it is already a reference,
|
||||||
|
// will suggest removing the borrow instead in that case.
|
||||||
|
&& !matches!(expr.kind, hir::ExprKind::AddrOf(..))
|
||||||
{
|
{
|
||||||
let call_node = self.tcx.hir_node(*call_hir_id);
|
let call_node = self.tcx.hir_node(*call_hir_id);
|
||||||
let msg = "consider dereferencing here";
|
let msg = "consider dereferencing here";
|
||||||
|
@ -10,10 +10,6 @@ LL | for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
|
|||||||
= note: required for `&std::slice::Iter<'_, {integer}>` to implement `IntoIterator`
|
= note: required for `&std::slice::Iter<'_, {integer}>` to implement `IntoIterator`
|
||||||
note: required by a bound in `std::iter::zip`
|
note: required by a bound in `std::iter::zip`
|
||||||
--> $SRC_DIR/core/src/iter/adapters/zip.rs:LL:COL
|
--> $SRC_DIR/core/src/iter/adapters/zip.rs:LL:COL
|
||||||
help: consider dereferencing here
|
|
||||||
|
|
|
||||||
LL | for (src, dest) in std::iter::zip(fields.iter(), *&variant.iter()) {
|
|
||||||
| +
|
|
||||||
help: consider removing the leading `&`-reference
|
help: consider removing the leading `&`-reference
|
||||||
|
|
|
|
||||||
LL - for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
|
LL - for (src, dest) in std::iter::zip(fields.iter(), &variant.iter()) {
|
||||||
@ -43,10 +39,6 @@ LL | for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone(
|
|||||||
= note: required for `&std::slice::Iter<'_, {integer}>` to implement `IntoIterator`
|
= note: required for `&std::slice::Iter<'_, {integer}>` to implement `IntoIterator`
|
||||||
note: required by a bound in `std::iter::zip`
|
note: required by a bound in `std::iter::zip`
|
||||||
--> $SRC_DIR/core/src/iter/adapters/zip.rs:LL:COL
|
--> $SRC_DIR/core/src/iter/adapters/zip.rs:LL:COL
|
||||||
help: consider dereferencing here
|
|
||||||
|
|
|
||||||
LL | for (src, dest) in std::iter::zip(fields.iter(), *&variant.iter().clone()) {
|
|
||||||
| +
|
|
||||||
help: consider removing the leading `&`-reference
|
help: consider removing the leading `&`-reference
|
||||||
|
|
|
|
||||||
LL - for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone()) {
|
LL - for (src, dest) in std::iter::zip(fields.iter(), &variant.iter().clone()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user