#![feature(decl_macro)]
#![warn(clippy::useless_format)]
#![allow(clippy::needless_borrow, clippy::to_string_in_format_args)]
#![expect(clippy::print_literal)]

struct Foo(pub String);

macro_rules! foo {
    ($($t:tt)*) => (Foo(format!($($t)*)))
}

fn main() {
    "foo".to_string();
    //~^ useless_format
    "{}".to_string();
    //~^ useless_format
    "{} abc {}".to_string();
    //~^ useless_format
    r##"foo {}
" bar"##.to_string();

    let _ = String::new();
    //~^ useless_format

    "foo".to_string();
    //~^ useless_format
    format!("{:?}", "foo"); // Don't warn about `Debug`.
    format!("{:8}", "foo");
    format!("{:width$}", "foo", width = 8);
    format!("foo {}", "bar");
    format!("{} bar", "foo");

    let arg = String::new();
    arg.to_string();
    //~^ useless_format
    format!("{:?}", arg); // Don't warn about debug.
    format!("{:8}", arg);
    format!("{:width$}", arg, width = 8);
    format!("foo {}", arg);
    format!("{} bar", arg);

    // We don’t want to warn for non-string args; see issue #697.
    format!("{}", 42);
    format!("{:?}", 42);
    format!("{:+}", 42);
    format!("foo {}", 42);
    format!("{} bar", 42);

    // We only want to warn about `format!` itself.
    println!("foo");
    println!("{}", "foo");
    println!("foo {}", "foo");
    println!("{}", 42);
    println!("foo {}", 42);

    // A `format!` inside a macro should not trigger a warning.
    foo!("should not warn");

    // Precision on string means slicing without panicking on size.
    format!("{:.1}", "foo"); // Could be `"foo"[..1]`
    format!("{:.10}", "foo"); // Could not be `"foo"[..10]`
    format!("{:.prec$}", "foo", prec = 1);
    format!("{:.prec$}", "foo", prec = 10);

    42.to_string();
    //~^ useless_format
    let x = std::path::PathBuf::from("/bar/foo/qux");
    x.display().to_string();
    //~^ useless_format

    // False positive
    let a = "foo".to_string();
    let _ = Some(a + "bar");
    //~^ useless_format

    // Wrap it with braces
    let v: Vec<String> = vec!["foo".to_string(), "bar".to_string()];
    let _s: String = (&*v.join("\n")).to_string();
    //~^ useless_format

    format!("prepend {:+}", "s");

    // Issue #8290
    let x = "foo";
    let _ = x.to_string();
    //~^ useless_format
    let _ = format!("{x:?}"); // Don't lint on debug
    let _ = x.to_string();
    //~^ useless_format

    // Issue #9234
    let abc = "abc";
    let _ = abc.to_string();
    //~^ useless_format
    let xx = "xx";
    let _ = xx.to_string();
    //~^ useless_format
}

// `format!` as the tail expression of a block emitted by another macro
// (e.g. rustc's `with_forced_trimmed_paths!`). The lint must still fire.
mod block_wrap {
    macro_rules! plain_mr {
        ($e:expr) => {
            $e
        };
    }
    macro_rules! block_mr {
        ($e:expr) => {{
            let _g: i32 = 0;
            $e
        }};
    }
    pub macro plain_dm($e:expr) {
        $e
    }
    pub macro block_dm($e:expr) {{
        let _g: i32 = 0;
        $e
    }}

    fn s() -> String {
        String::from("x")
    }

    pub fn check() {
        let _ = plain_mr!(s().to_string());
        //~^ useless_format
        let _ = block_mr!(s().to_string());
        //~^ useless_format
        let _ = plain_dm!(s().to_string());
        //~^ useless_format
        let _ = block_dm!(s().to_string());
        //~^ useless_format
    }
}
