]> git.lizzy.rs Git - rust.git/blobdiff - tests/ui/mem_replace.fixed
Prevent `mem_replace_with_default` lint within macros
[rust.git] / tests / ui / mem_replace.fixed
index 4e47ac95d82d30f1e87292ad567fe8d3f6cff0d4..8606e98335dfe49e172b9c3cdf2481ac6c65188f 100644 (file)
@@ -8,14 +8,46 @@
 // except according to those terms.
 
 // run-rustfix
+// aux-build:macro_rules.rs
 #![allow(unused_imports)]
-#![warn(clippy::all, clippy::style, clippy::mem_replace_option_with_none)]
+#![warn(
+    clippy::all,
+    clippy::style,
+    clippy::mem_replace_option_with_none,
+    clippy::mem_replace_with_default
+)]
+
+#[macro_use]
+extern crate macro_rules;
 
 use std::mem;
 
-fn main() {
+macro_rules! take {
+    ($s:expr) => {
+        std::mem::replace($s, Default::default())
+    };
+}
+
+fn replace_option_with_none() {
     let mut an_option = Some(1);
     let _ = an_option.take();
     let an_option = &mut Some(1);
     let _ = an_option.take();
 }
+
+fn replace_with_default() {
+    let mut s = String::from("foo");
+    let _ = std::mem::take(&mut s);
+    let s = &mut String::from("foo");
+    let _ = std::mem::take(s);
+    let _ = std::mem::take(s);
+
+    // dont lint within macros
+    take!(s);
+    take_external!(s);
+}
+
+fn main() {
+    replace_option_with_none();
+    replace_with_default();
+}