//@ aux-build:amputate-span.rs
//@ run-rustfix
//@ edition:2018
//@ compile-flags: --extern amputate_span

// This test has been crafted to ensure the following things:
//
// 1. There's a resolution error that prompts the compiler to suggest
//    adding a `use` item.
//
// 2. There are no `use` or `extern crate` items in the source
//    code. In fact, there is only one item, the `fn main`
//    declaration.
//
// 3. The single `fn main` declaration has an attribute attached to it
//    that just deletes the first token from the given item.
//
// You need all of these conditions to hold in order to replicate the
// scenario that yielded issue 87613, where the compiler's suggestion
// looks like:
//
// ```
// help: consider importing this struct
//    |
// 47 | hey */ async use std::process::Command;
//    |              ++++++++++++++++++++++++++
// ```
//
// The first condition is necessary to force the compiler issue a
// suggestion. The second condition is necessary to force the
// suggestion to be issued at a span associated with the sole
// `fn`-item of this crate. The third condition is necessary in order
// to yield the weird state where the associated span of the `fn`-item
// does not actually cover all of the original source code of the
// `fn`-item (which is why we are calling it an "amputated" span
// here).
//
// Note that satisfying conditions 2 and 3 requires the use of the
// `--extern` compile flag.
//
// You might ask yourself: What code would do such a thing?  The
// answer is: the #[tokio::main] attribute does *exactly* this (as
// well as injecting some other code into the `fn main` that it
// constructs).

use std::process::Command;

#[amputate_span::drop_first_token]
/* what the
hey */ async fn main() {
    Command::new("git"); //~ ERROR [E0433]
}

// (The /* ... */ comment in the above is not part of the original
// bug. It is just meant to illustrate one particular facet of the
// original non-ideal behavior, where we were transcribing the
// trailing comment as part of the emitted suggestion, for better or
// for worse.)

#[allow(dead_code)]
mod inner {
    use std::process::Command;

#[amputate_span::drop_first_token]
        /* another interesting
    case */ async fn foo() {
        Command::new("git"); //~ ERROR [E0433]
    }
}
