#![warn(clippy::format_push_string)]

fn main() {
    use std::fmt::Write;

    let mut string = String::new();
    let _ = write!(string, "{:?}", 1234);
    //~^ format_push_string

    let _ = write!(string, "{:?}", 5678);
    //~^ format_push_string

    macro_rules! string {
        () => {
            String::new()
        };
    }
    let _ = write!(string!(), "{:?}", 5678);
    //~^ format_push_string
}

// TODO: recognize the already imported `fmt::Write`, and don't add a note suggesting to import it
// again
mod import_write {
    mod push_str {
        mod imported_anonymously {
            fn main(string: &mut String) {
                use std::fmt::Write as _;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported {
            fn main(string: &mut String) {
                use std::fmt::Write;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported_anonymously_in_module {
            use std::fmt::Write as _;

            fn main(string: &mut String) {
                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported_in_module {
            use std::fmt::Write;

            fn main(string: &mut String) {
                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported_and_imported {
            fn foo(string: &mut String) {
                use std::fmt::Write;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }

            fn bar(string: &mut String) {
                use std::fmt::Write;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }
    }

    mod add_assign {
        mod imported_anonymously {
            fn main(string: &mut String) {
                use std::fmt::Write as _;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported {
            fn main(string: &mut String) {
                use std::fmt::Write;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported_anonymously_in_module {
            use std::fmt::Write as _;

            fn main(string: &mut String) {
                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported_in_module {
            use std::fmt::Write;

            fn main(string: &mut String) {
                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }

        mod imported_and_imported {
            fn foo(string: &mut String) {
                use std::fmt::Write;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }

            fn bar(string: &mut String) {
                use std::fmt::Write;

                let _ = write!(string, "{:?}", 1234);
                //~^ format_push_string
            }
        }
    }
}
