| //@aux-build:proc_macros.rs | |
| //@revisions: old_range new_range | |
| //@[new_range] compile-flags: --cfg=new_range | |
| // When feature(new_range) stabilizes, this should be converted to testing | |
| // old and new editions instead. | |
| #![cfg_attr(new_range, feature(new_range))] | |
| #![warn(clippy::single_range_in_vec_init)] | |
| #![expect(clippy::no_effect, clippy::useless_vec)] | |
| #[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 | |
| std::vec::Vec::<isize>::from_iter(0..200isize); | |
| //~^ single_range_in_vec_init | |
| std::vec::Vec::<isize>::from_iter(0..200isize); | |
| //~^ 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 = std::vec::Vec::<i32>::from_iter(0..as_i32!(10)); | |
| //~^ single_range_in_vec_init | |
| } | |
| fn issue16508() { | |
| std::vec::Vec::<i32>::from_iter(0..=10); | |
| //~^ single_range_in_vec_init | |
| std::vec::Vec::<i32>::from_iter(0..=10); | |
| //~^ single_range_in_vec_init | |
| } |