| #![feature(os_string_truncate)] | |
| #![warn(clippy::manual_clear)] | |
| use std::collections::VecDeque; | |
| use std::ffi::OsString; | |
| struct CustomTruncate(String); | |
| impl CustomTruncate { | |
| fn truncate(&mut self, len: usize) { | |
| self.0.truncate(len); | |
| } | |
| fn clear(&mut self) { | |
| self.0.clear(); | |
| } | |
| } | |
| fn main() { | |
| let mut v = vec![1, 2, 3]; | |
| v.clear(); //~ manual_clear | |
| let mut d: VecDeque<i32> = VecDeque::from([1, 2, 3]); | |
| d.clear(); //~ manual_clear | |
| // lint: macro receiver | |
| macro_rules! get_vec { | |
| ($e:expr) => { | |
| $e | |
| }; | |
| } | |
| get_vec!(v).clear(); //~ manual_clear | |
| // no lint: other args | |
| v.truncate(1); | |
| // no lint: `0` from a different context | |
| { | |
| // `0` inside a block expression should not be changed into `clear()` | |
| v.truncate({ 0 }); | |
| } | |
| // lint: String | |
| let mut s = String::from("abc"); | |
| s.clear(); //~ manual_clear | |
| // lint: OsString | |
| let mut os = OsString::from("abc"); | |
| os.clear(); //~ manual_clear | |
| // no lint: custom type | |
| let mut c = CustomTruncate(String::from("abc")); | |
| c.truncate(0); | |
| } |