#![allow( unused, clippy::redundant_closure, clippy::reversed_empty_ranges, clippy::identity_op )] #![warn(clippy::map_with_unused_argument_over_ranges)] fn do_something() -> usize { todo!() } fn do_something_interesting(x: usize, y: usize) -> usize { todo!() } macro_rules! r#gen { () => { (0..10).map(|_| do_something()); }; } fn main() { // These should be raised std::iter::repeat_with(|| do_something()).take(10); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(10); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(11); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(7); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(8); //~^ map_with_unused_argument_over_ranges std::iter::repeat_n(3, 10); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| { //~^ map_with_unused_argument_over_ranges let x = 3; x + 2 }).take(10); std::iter::repeat_with(|| do_something()).take(10).collect::>(); //~^ map_with_unused_argument_over_ranges let upper = 4; std::iter::repeat_with(|| do_something()).take(upper); //~^ map_with_unused_argument_over_ranges let upper_fn = || 4; std::iter::repeat_with(|| do_something()).take(upper_fn()); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(upper_fn() + 1); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(upper_fn() - 2); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(upper_fn() - 1); //~^ map_with_unused_argument_over_ranges (-3..9).map(|_| do_something()); std::iter::repeat_with(|| do_something()).take(0); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take(1); //~^ map_with_unused_argument_over_ranges std::iter::repeat_with(|| do_something()).take((1 << 4) - 0); //~^ map_with_unused_argument_over_ranges // These should not be raised r#gen!(); let lower = 2; let lower_fn = || 2; (lower..upper_fn()).map(|_| do_something()); // Ranges not starting at zero not yet handled (lower_fn()..upper_fn()).map(|_| do_something()); // Ranges not starting at zero not yet handled (lower_fn()..=upper_fn()).map(|_| do_something()); // Ranges not starting at zero not yet handled (0..10).map(|x| do_something_interesting(x, 4)); // Actual map over range "Foobar".chars().map(|_| do_something()); // Not a map over range // i128::MAX == 340282366920938463463374607431768211455 (0..=340282366920938463463374607431768211455).map(|_: u128| do_something()); // Can't be replaced due to overflow } #[clippy::msrv = "1.27"] fn msrv_1_27() { (0..10).map(|_| do_something()); } #[clippy::msrv = "1.28"] fn msrv_1_28() { std::iter::repeat_with(|| do_something()).take(10); //~^ map_with_unused_argument_over_ranges } #[clippy::msrv = "1.81"] fn msrv_1_82() { std::iter::repeat(3).take(10); //~^ map_with_unused_argument_over_ranges }