rust/tests/ui/map_clone.fixed

69 lines
1.9 KiB
Rust
Raw Normal View History

2021-01-10 17:51:43 -06:00
#![warn(clippy::map_clone)]
#![allow(
clippy::clone_on_copy,
clippy::iter_cloned_collect,
clippy::many_single_char_names,
2023-06-06 15:56:57 -05:00
clippy::redundant_clone,
2024-01-07 06:18:11 -06:00
clippy::redundant_closure,
2023-06-06 15:56:57 -05:00
clippy::useless_vec
2021-01-10 17:51:43 -06:00
)]
2019-01-13 06:10:25 -06:00
fn main() {
let _: Vec<i8> = vec![5_i8; 6].iter().copied().collect();
2019-01-13 06:10:25 -06:00
let _: Vec<String> = vec![String::new()].iter().cloned().collect();
let _: Vec<u32> = vec![42, 43].iter().copied().collect();
2019-01-13 06:10:25 -06:00
let _: Option<u64> = Some(Box::new(16)).map(|b| *b);
let _: Option<u64> = Some(&16).copied();
let _: Option<u8> = Some(&1).copied();
// Don't lint these
let v = vec![5_i8; 6];
let a = 0;
let b = &a;
let _ = v.iter().map(|_x| *b);
let _ = v.iter().map(|_x| a.clone());
let _ = v.iter().map(|&_x| a);
2019-01-15 00:17:55 -06:00
// Issue #498
let _ = std::env::args();
// Issue #4824 item types that aren't references
{
use std::rc::Rc;
let o: Option<Rc<u32>> = Some(Rc::new(0_u32));
let _: Option<u32> = o.map(|x| *x);
let v: Vec<Rc<u32>> = vec![Rc::new(0_u32)];
let _: Vec<u32> = v.into_iter().map(|x| *x).collect();
}
// Issue #5524 mutable references
{
let mut c = 42;
let v = vec![&mut c];
let _: Vec<u32> = v.into_iter().map(|x| *x).collect();
let mut d = 21;
let v = vec![&mut d];
let _: Vec<u32> = v.into_iter().map(|&mut x| x).collect();
}
// Issue #6299
{
let mut aa = 5;
let mut bb = 3;
let items = vec![&mut aa, &mut bb];
let _: Vec<_> = items.into_iter().map(|x| x.clone()).collect();
}
2020-10-30 09:18:16 -05:00
// Issue #6239 deref coercion and clone deref
{
use std::cell::RefCell;
let _ = Some(RefCell::new(String::new()).borrow()).map(|s| s.clone());
}
2024-01-07 06:18:11 -06:00
let x = Some(String::new());
let y = x.as_ref().cloned();
//~^ ERROR: you are explicitly cloning with `.map()`
2019-01-13 06:10:25 -06:00
}