mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 03:38:29 +00:00
add plural form to useless_conversion if depth > 0
This commit is contained in:
parent
8a30f2f71a
commit
5a7e33e5b2
@ -93,14 +93,13 @@ fn into_iter_call<'hir>(cx: &LateContext<'_>, expr: &'hir Expr<'hir>) -> Option<
|
|||||||
/// Same as [`into_iter_call`], but tries to look for the innermost `.into_iter()` call, e.g.:
|
/// Same as [`into_iter_call`], but tries to look for the innermost `.into_iter()` call, e.g.:
|
||||||
/// `foo.into_iter().into_iter()`
|
/// `foo.into_iter().into_iter()`
|
||||||
/// ^^^ we want this expression
|
/// ^^^ we want this expression
|
||||||
fn into_iter_deep_call<'hir>(cx: &LateContext<'_>, mut expr: &'hir Expr<'hir>) -> Option<&'hir Expr<'hir>> {
|
fn into_iter_deep_call<'hir>(cx: &LateContext<'_>, mut expr: &'hir Expr<'hir>) -> (&'hir Expr<'hir>, usize) {
|
||||||
loop {
|
let mut depth = 0;
|
||||||
if let Some(recv) = into_iter_call(cx, expr) {
|
while let Some(recv) = into_iter_call(cx, expr) {
|
||||||
expr = recv;
|
expr = recv;
|
||||||
} else {
|
depth += 1;
|
||||||
return Some(expr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
(expr, depth)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[expect(clippy::too_many_lines)]
|
#[expect(clippy::too_many_lines)]
|
||||||
@ -170,18 +169,19 @@ impl<'tcx> LateLintPass<'tcx> for UselessConversion {
|
|||||||
&& let Some(&into_iter_param) = sig.inputs().get(kind.param_pos(arg_pos))
|
&& let Some(&into_iter_param) = sig.inputs().get(kind.param_pos(arg_pos))
|
||||||
&& let ty::Param(param) = into_iter_param.kind()
|
&& let ty::Param(param) = into_iter_param.kind()
|
||||||
&& let Some(span) = into_iter_bound(cx, parent_fn_did, into_iter_did, param.index)
|
&& let Some(span) = into_iter_bound(cx, parent_fn_did, into_iter_did, param.index)
|
||||||
|
{
|
||||||
// Get the "innermost" `.into_iter()` call, e.g. given this expression:
|
// Get the "innermost" `.into_iter()` call, e.g. given this expression:
|
||||||
// `foo.into_iter().into_iter()`
|
// `foo.into_iter().into_iter()`
|
||||||
// ^^^
|
// ^^^
|
||||||
// We want this span
|
let (into_iter_recv, depth) = into_iter_deep_call(cx, into_iter_recv);
|
||||||
&& let Some(into_iter_recv) = into_iter_deep_call(cx, into_iter_recv)
|
|
||||||
{
|
let plural = if depth == 0 { "" } else { "s" };
|
||||||
let mut applicability = Applicability::MachineApplicable;
|
let mut applicability = Applicability::MachineApplicable;
|
||||||
let sugg = snippet_with_applicability(cx, into_iter_recv.span.source_callsite(), "<expr>", &mut applicability).into_owned();
|
let sugg = snippet_with_applicability(cx, into_iter_recv.span.source_callsite(), "<expr>", &mut applicability).into_owned();
|
||||||
span_lint_and_then(cx, USELESS_CONVERSION, e.span, "explicit call to `.into_iter()` in function argument accepting `IntoIterator`", |diag| {
|
span_lint_and_then(cx, USELESS_CONVERSION, e.span, "explicit call to `.into_iter()` in function argument accepting `IntoIterator`", |diag| {
|
||||||
diag.span_suggestion(
|
diag.span_suggestion(
|
||||||
e.span,
|
e.span,
|
||||||
"consider removing `.into_iter()`",
|
format!("consider removing the `.into_iter()`{plural}"),
|
||||||
sugg,
|
sugg,
|
||||||
applicability,
|
applicability,
|
||||||
);
|
);
|
||||||
|
@ -122,7 +122,7 @@ error: explicit call to `.into_iter()` in function argument accepting `IntoItera
|
|||||||
--> $DIR/useless_conversion.rs:171:7
|
--> $DIR/useless_conversion.rs:171:7
|
||||||
|
|
|
|
||||||
LL | b(vec![1, 2].into_iter());
|
LL | b(vec![1, 2].into_iter());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `vec![1, 2]`
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `vec![1, 2]`
|
||||||
|
|
|
|
||||||
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
||||||
--> $DIR/useless_conversion.rs:161:13
|
--> $DIR/useless_conversion.rs:161:13
|
||||||
@ -134,7 +134,7 @@ error: explicit call to `.into_iter()` in function argument accepting `IntoItera
|
|||||||
--> $DIR/useless_conversion.rs:172:7
|
--> $DIR/useless_conversion.rs:172:7
|
||||||
|
|
|
|
||||||
LL | c(vec![1, 2].into_iter());
|
LL | c(vec![1, 2].into_iter());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `vec![1, 2]`
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `vec![1, 2]`
|
||||||
|
|
|
|
||||||
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
||||||
--> $DIR/useless_conversion.rs:162:18
|
--> $DIR/useless_conversion.rs:162:18
|
||||||
@ -146,7 +146,7 @@ error: explicit call to `.into_iter()` in function argument accepting `IntoItera
|
|||||||
--> $DIR/useless_conversion.rs:173:7
|
--> $DIR/useless_conversion.rs:173:7
|
||||||
|
|
|
|
||||||
LL | d(vec![1, 2].into_iter());
|
LL | d(vec![1, 2].into_iter());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `vec![1, 2]`
|
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`: `vec![1, 2]`
|
||||||
|
|
|
|
||||||
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
||||||
--> $DIR/useless_conversion.rs:165:12
|
--> $DIR/useless_conversion.rs:165:12
|
||||||
@ -158,7 +158,7 @@ error: explicit call to `.into_iter()` in function argument accepting `IntoItera
|
|||||||
--> $DIR/useless_conversion.rs:176:7
|
--> $DIR/useless_conversion.rs:176:7
|
||||||
|
|
|
|
||||||
LL | b(vec![1, 2].into_iter().into_iter());
|
LL | b(vec![1, 2].into_iter().into_iter());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `vec![1, 2]`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`s: `vec![1, 2]`
|
||||||
|
|
|
|
||||||
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
||||||
--> $DIR/useless_conversion.rs:161:13
|
--> $DIR/useless_conversion.rs:161:13
|
||||||
@ -170,7 +170,7 @@ error: explicit call to `.into_iter()` in function argument accepting `IntoItera
|
|||||||
--> $DIR/useless_conversion.rs:177:7
|
--> $DIR/useless_conversion.rs:177:7
|
||||||
|
|
|
|
||||||
LL | b(vec![1, 2].into_iter().into_iter().into_iter());
|
LL | b(vec![1, 2].into_iter().into_iter().into_iter());
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing `.into_iter()`: `vec![1, 2]`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider removing the `.into_iter()`s: `vec![1, 2]`
|
||||||
|
|
|
|
||||||
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
note: this parameter accepts any `IntoIterator`, so you don't need to call `.into_iter()`
|
||||||
--> $DIR/useless_conversion.rs:161:13
|
--> $DIR/useless_conversion.rs:161:13
|
||||||
|
Loading…
Reference in New Issue
Block a user