#![deny(clippy::borrowed_box)]
#![expect(clippy::disallowed_names)]

use std::fmt::Display;

pub fn test1(foo: &mut Box<bool>) {
    // Although this function could be changed to "&mut bool",
    // avoiding the Box, mutable references to boxes are not
    // flagged by this lint.
    //
    // This omission is intentional: By passing a mutable Box,
    // the memory location of the pointed-to object could be
    // modified. By passing a mutable reference, the contents
    // could change, but not the location.
    println!("{:?}", foo)
}

pub fn test2() {
    let foo: &bool;
    //~^ borrowed_box
}

struct Test3<'a> {
    foo: &'a bool,
    //~^ borrowed_box
}

trait Test4 {
    fn test4(a: &bool);
    //~^ borrowed_box
}

use std::any::Any;

pub fn test5(foo: &mut Box<dyn Any>) {
    println!("{:?}", foo)
}

pub fn test6() {
    let foo: &Box<dyn Any>;
}

struct Test7<'a> {
    foo: &'a Box<dyn Any>,
}

trait Test8 {
    fn test8(a: &Box<dyn Any>);
}

impl<'a> Test8 for Test7<'a> {
    fn test8(a: &Box<dyn Any>) {
        unimplemented!();
    }
}

pub fn test9(foo: &mut Box<dyn Any + Send + Sync>) {
    let _ = foo;
}

pub fn test10() {
    let foo: &Box<dyn Any + Send + 'static>;
}

struct Test11<'a> {
    foo: &'a Box<dyn Any + Send>,
}

trait Test12 {
    fn test4(a: &Box<dyn Any + 'static>);
}

impl<'a> Test12 for Test11<'a> {
    fn test4(a: &Box<dyn Any + 'static>) {
        unimplemented!();
    }
}

pub fn test13(boxed_slice: &mut Box<[i32]>) {
    // Unconditionally replaces the box pointer.
    //
    // This cannot be accomplished if "&mut [i32]" is passed,
    // and provides a test case where passing a reference to
    // a Box is valid.
    let mut data = vec![12];
    *boxed_slice = data.into_boxed_slice();
}

// The suggestion should include proper parentheses to avoid a syntax error.
pub fn test14(_display: &dyn Display) {}
//~^ borrowed_box

pub fn test15(_display: &(dyn Display + Send)) {}
//~^ borrowed_box

pub fn test16<'a>(_display: &'a (dyn Display + 'a)) {}
//~^ borrowed_box

pub fn test17(_display: &impl Display) {}
//~^ borrowed_box

pub fn test18(_display: &(impl Display + Send)) {}
//~^ borrowed_box

pub fn test19<'a>(_display: &'a (impl Display + 'a)) {}
//~^ borrowed_box

// This exists only to check what happens when parentheses are already present.
// Even though the current implementation doesn't put extra parentheses,
// it's fine that unnecessary parentheses appear in the future for some reason.
pub fn test20(_display: &(dyn Display + Send)) {}
//~^ borrowed_box

#[allow(clippy::borrowed_box)]
trait Trait {
    fn f(b: &Box<bool>);
}

// Trait impls are not linted
impl Trait for () {
    fn f(_: &Box<bool>) {}
}

fn main() {}
