//@aux-build:proc_macros.rs
#![warn(clippy::mem_replace_with_default)]

extern crate proc_macros;
use proc_macros::{external, inline_macros};

use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, LinkedList, VecDeque};
use std::mem;

fn main() {
    let mut s = String::from("foo");
    let _ = std::mem::take(&mut s);
    //~^ mem_replace_with_default
    let _ = std::mem::take(&mut s);
    //~^ mem_replace_with_default

    let s = &mut String::from("foo");
    let _ = std::mem::take(s);
    //~^ mem_replace_with_default
    let _ = std::mem::take(s);
    //~^ mem_replace_with_default
    let _ = std::mem::take(s);
    //~^ mem_replace_with_default

    let mut v = vec![123];
    let _ = std::mem::take(&mut v);
    //~^ mem_replace_with_default
    let _ = std::mem::take(&mut v);
    //~^ mem_replace_with_default
    let _ = std::mem::take(&mut v);
    //~^ mem_replace_with_default
    let _ = std::mem::take(&mut v);
    //~^ mem_replace_with_default

    let mut hash_map: HashMap<i32, i32> = HashMap::new();
    let _ = std::mem::take(&mut hash_map);
    //~^ mem_replace_with_default

    let mut btree_map: BTreeMap<i32, i32> = BTreeMap::new();
    let _ = std::mem::take(&mut btree_map);
    //~^ mem_replace_with_default

    let mut vd: VecDeque<i32> = VecDeque::new();
    let _ = std::mem::take(&mut vd);
    //~^ mem_replace_with_default

    let mut hash_set: HashSet<&str> = HashSet::new();
    let _ = std::mem::take(&mut hash_set);
    //~^ mem_replace_with_default

    let mut btree_set: BTreeSet<&str> = BTreeSet::new();
    let _ = std::mem::take(&mut btree_set);
    //~^ mem_replace_with_default

    let mut list: LinkedList<i32> = LinkedList::new();
    let _ = std::mem::take(&mut list);
    //~^ mem_replace_with_default

    let mut binary_heap: BinaryHeap<i32> = BinaryHeap::new();
    let _ = std::mem::take(&mut binary_heap);
    //~^ mem_replace_with_default

    let mut tuple = (vec![1, 2], BinaryHeap::<i32>::new());
    let _ = std::mem::take(&mut tuple);
    //~^ mem_replace_with_default

    let mut refstr = "hello";
    let _ = std::mem::take(&mut refstr);
    //~^ mem_replace_with_default

    let mut slice: &[i32] = &[1, 2, 3];
    let _ = std::mem::take(&mut slice);
    //~^ mem_replace_with_default
}

#[inline_macros]
fn macros(s: &mut String) {
    let _ = inline!(std::mem::take($s));
    //~^ mem_replace_with_default
    let _ = external!(std::mem::replace($s, Default::default()));
}

// lint is disabled for primitives because in this case `take`
// has no clear benefit over `replace` and sometimes is harder to read
fn dont_lint_primitive() {
    let mut pbool = true;
    let _ = std::mem::replace(&mut pbool, false);

    let mut pint = 5;
    let _ = std::mem::replace(&mut pint, 0);
}

// lint is disabled for expressions that are not used because changing to `take` is not the
// recommended fix. Additionally, the `replace` is #[must_use], so that lint will provide
// the correct suggestion
fn dont_lint_not_used() {
    let mut s = String::from("foo");
    std::mem::replace(&mut s, String::default());
}

#[clippy::msrv = "1.39"]
fn msrv_1_39() {
    let mut s = String::from("foo");
    let _ = std::mem::replace(&mut s, String::default());
}

#[clippy::msrv = "1.40"]
fn msrv_1_40() {
    let mut s = String::from("foo");
    let _ = std::mem::take(&mut s);
    //~^ mem_replace_with_default
}

fn issue9824() {
    struct Bar {
        val: String,
    }

    let mut b = Bar {
        val: String::from("bar"),
    };

    let _ = std::mem::take(&mut b.val);
    //~^ mem_replace_with_default
}

fn issue15785() {
    let mut text = String::from("foo");
    let replaced = std::mem::take(dbg!(&mut text));
    //~^ mem_replace_with_default
}
