blob: bc9cc4eb4dfe53854e87d35880c91fc913e50306 [file] [edit]
//@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
}