#![warn(clippy::comparison_to_empty)]
#![allow(clippy::borrow_deref_ref, clippy::needless_ifs, clippy::useless_vec)]

fn main() {
    // Disallow comparisons to empty
    let s = String::new();
    let _ = s.is_empty();
    //~^ comparison_to_empty
    let _ = !s.is_empty();
    //~^ comparison_to_empty

    let v = vec![0];
    let _ = v.is_empty();
    //~^ comparison_to_empty
    let _ = !v.is_empty();
    //~^ comparison_to_empty
    if (*v).is_empty() {}
    //~^ comparison_to_empty
    let s = [0].as_slice();
    if s.is_empty() {}
    //~^ comparison_to_empty
    if s.is_empty() {}
    //~^ comparison_to_empty
    if s.is_empty()
    //~^ comparison_to_empty
        && s.is_empty()
    //~^ comparison_to_empty
    {}

    // Allow comparisons to non-empty
    let s = String::new();
    let _ = s == " ";
    let _ = s != " ";

    let v = vec![0];
    let _ = v == [0];
    let _ = v != [0];
    if let [0] = &*v {}
    let s = [0].as_slice();
    if let [0] = s {}
    if let [0] = &*s
        && s == [0]
    {}

    // Also lint the `PartialEq` methods
    let s = String::new();
    let _ = s.is_empty();
    //~^ comparison_to_empty
    let _ = !s.is_empty();
    //~^ comparison_to_empty
    let v = vec![0];
    let _ = v.is_empty();
    //~^ comparison_to_empty
    let _ = !v.is_empty();
    //~^ comparison_to_empty
}
