| //@aux-build:proc_macros.rs |
| #![allow(clippy::no_effect, clippy::unnecessary_operation, clippy::useless_vec, unused)] |
| #![warn(clippy::single_range_in_vec_init)] |
| |
| #[macro_use] |
| extern crate proc_macros; |
| |
| macro_rules! a { |
| () => { |
| vec![0..200]; |
| }; |
| } |
| |
| fn awa<T: PartialOrd>(start: T, end: T) { |
| [start..end]; |
| } |
| |
| fn awa_vec<T: PartialOrd>(start: T, end: T) { |
| vec![start..end]; |
| } |
| |
| fn main() { |
| // Lint |
| [0; 200]; |
| //~^ single_range_in_vec_init |
| vec![0; 200]; |
| //~^ single_range_in_vec_init |
| [0u8; 200]; |
| //~^ single_range_in_vec_init |
| [0usize; 200]; |
| //~^ single_range_in_vec_init |
| [0; 200usize]; |
| //~^ single_range_in_vec_init |
| vec![0u8; 200]; |
| //~^ single_range_in_vec_init |
| vec![0usize; 200]; |
| //~^ single_range_in_vec_init |
| vec![0; 200usize]; |
| //~^ single_range_in_vec_init |
| // Only suggest collect |
| (0..200isize).collect::<std::vec::Vec<isize>>(); |
| //~^ single_range_in_vec_init |
| (0..200isize).collect::<std::vec::Vec<isize>>(); |
| //~^ single_range_in_vec_init |
| // Do not lint |
| [0..200, 0..100]; |
| vec![0..200, 0..100]; |
| [0.0..200.0]; |
| vec![0.0..200.0]; |
| // `Copy` is not implemented for `Range`, so this doesn't matter |
| // FIXME: [0..200; 2]; |
| // FIXME: [vec!0..200; 2]; |
| |
| // Unfortunately skips any macros |
| a!(); |
| |
| // Skip external macros and procedural macros |
| external! { |
| [0..200]; |
| vec![0..200]; |
| } |
| with_span! { |
| span |
| [0..200]; |
| vec![0..200]; |
| } |
| } |
| |
| fn issue16042() { |
| use std::ops::Range; |
| |
| let input = vec![Range { start: 0, end: 5 }]; |
| } |
| |
| fn issue16044() { |
| macro_rules! as_i32 { |
| ($x:expr) => { |
| $x as i32 |
| }; |
| } |
| |
| let input = (0..as_i32!(10)).collect::<std::vec::Vec<i32>>(); |
| //~^ single_range_in_vec_init |
| } |