Skip to content

Commit

Permalink
Add parenthesis where necessary in end of range
Browse files Browse the repository at this point in the history
  • Loading branch information
rspencer01 committed Aug 26, 2024
1 parent 90a58bd commit 0d4912b
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::methods::MAP_WITH_UNUSED_ARGUMENT_OVER_RANGES;
use clippy_config::msrvs::{self, Msrv};
use clippy_utils::diagnostics::span_lint_and_then;
use clippy_utils::source::snippet_with_applicability;
use clippy_utils::sugg::Sugg;
use clippy_utils::{eager_or_lazy, higher, usage};
use rustc_ast::ast::RangeLimits;
use rustc_ast::LitKind;
Expand Down Expand Up @@ -39,7 +40,9 @@ fn extract_count_with_applicability(
};
return Some(format!("{count}"));
}
let end_snippet = snippet_with_applicability(cx, end.span, "...", applicability).into_owned();
let end_snippet = Sugg::hir_with_applicability(cx, end, "...", applicability)
.maybe_par()
.into_string();
if lower_bound == 0 {
if range.limits == RangeLimits::Closed {
return Some(format!("{end_snippet} + 1"));
Expand Down
8 changes: 7 additions & 1 deletion tests/ui/map_with_unused_argument_over_ranges.fixed
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
#![allow(unused, clippy::redundant_closure, clippy::reversed_empty_ranges)]
#![allow(
unused,
clippy::redundant_closure,
clippy::reversed_empty_ranges,
clippy::identity_op
)]
#![warn(clippy::map_with_unused_argument_over_ranges)]

fn do_something() -> usize {
Expand Down Expand Up @@ -38,6 +43,7 @@ fn main() {
(-3..9).map(|_| do_something());
std::iter::repeat_with(|| do_something()).take(0);
std::iter::repeat_with(|| do_something()).take(1);
std::iter::repeat_with(|| do_something()).take((1 << 4) - 0);
// These should not be raised
gen!();
let lower = 2;
Expand Down
8 changes: 7 additions & 1 deletion tests/ui/map_with_unused_argument_over_ranges.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
#![allow(unused, clippy::redundant_closure, clippy::reversed_empty_ranges)]
#![allow(
unused,
clippy::redundant_closure,
clippy::reversed_empty_ranges,
clippy::identity_op
)]
#![warn(clippy::map_with_unused_argument_over_ranges)]

fn do_something() -> usize {
Expand Down Expand Up @@ -38,6 +43,7 @@ fn main() {
(-3..9).map(|_| do_something());
(9..3).map(|_| do_something());
(9..=9).map(|_| do_something());
(1..=1 << 4).map(|_| do_something());
// These should not be raised
gen!();
let lower = 2;
Expand Down
46 changes: 29 additions & 17 deletions tests/ui/map_with_unused_argument_over_ranges.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:20:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:25:5
|
LL | (0..10).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -13,7 +13,7 @@ LL + std::iter::repeat_with(|| do_something()).take(10);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:21:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:26:5
|
LL | (0..10).map(|_foo| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -25,7 +25,7 @@ LL + std::iter::repeat_with(|| do_something()).take(10);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:22:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:27:5
|
LL | (0..=10).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -37,7 +37,7 @@ LL + std::iter::repeat_with(|| do_something()).take(11);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:23:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:28:5
|
LL | (3..10).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -49,7 +49,7 @@ LL + std::iter::repeat_with(|| do_something()).take(7);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:24:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:29:5
|
LL | (3..=10).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -61,7 +61,7 @@ LL + std::iter::repeat_with(|| do_something()).take(8);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:25:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:30:5
|
LL | (0..10).map(|_| 3);
| ^^^^^^^^^^^^^^^^^^
Expand All @@ -72,7 +72,7 @@ LL | std::iter::repeat(3).take(10);
| ~~~~~~~~~~~~~~~~~ ~ +++++++++

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:26:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:31:5
|
LL | / (0..10).map(|_| {
LL | | let x = 3;
Expand All @@ -89,7 +89,7 @@ LL ~ }).take(10);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:30:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:35:5
|
LL | (0..10).map(|_| do_something()).collect::<Vec<_>>();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -101,7 +101,7 @@ LL + std::iter::repeat_with(|| do_something()).take(10).collect::<Vec<_>>();
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:32:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:37:5
|
LL | (0..upper).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -113,7 +113,7 @@ LL + std::iter::repeat_with(|| do_something()).take(upper);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:34:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:39:5
|
LL | (0..upper_fn()).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -125,7 +125,7 @@ LL + std::iter::repeat_with(|| do_something()).take(upper_fn());
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:35:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:40:5
|
LL | (0..=upper_fn()).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -137,7 +137,7 @@ LL + std::iter::repeat_with(|| do_something()).take(upper_fn() + 1);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:36:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:41:5
|
LL | (2..upper_fn()).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -149,7 +149,7 @@ LL + std::iter::repeat_with(|| do_something()).take(upper_fn() - 2);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:37:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:42:5
|
LL | (2..=upper_fn()).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -161,7 +161,7 @@ LL + std::iter::repeat_with(|| do_something()).take(upper_fn() - 1);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:39:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:44:5
|
LL | (9..3).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -173,7 +173,7 @@ LL + std::iter::repeat_with(|| do_something()).take(0);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:40:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:45:5
|
LL | (9..=9).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -185,7 +185,19 @@ LL + std::iter::repeat_with(|| do_something()).take(1);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:59:5
--> tests/ui/map_with_unused_argument_over_ranges.rs:46:5
|
LL | (1..=1 << 4).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
help: remove the explicit range and use `repeat_with` and `take`
|
LL - (1..=1 << 4).map(|_| do_something());
LL + std::iter::repeat_with(|| do_something()).take((1 << 4) - 0);
|

error: map of a closure that does not depend on its parameter over a range
--> tests/ui/map_with_unused_argument_over_ranges.rs:65:5
|
LL | (0..10).map(|_| do_something());
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -196,5 +208,5 @@ LL - (0..10).map(|_| do_something());
LL + std::iter::repeat_with(|| do_something()).take(10);
|

error: aborting due to 16 previous errors
error: aborting due to 17 previous errors

0 comments on commit 0d4912b

Please sign in to comment.