cf09cba20c
Previously we would only mention that the item was gated out, and opportunisitically mention the feature flag name when possible. We now point to the place where the item was gated, which can be behind layers of macro indirection, or in different modules. ``` error[E0433]: failed to resolve: could not find `doesnt_exist` in `inner` --> $DIR/diagnostics-cross-crate.rs:18:23 | LL | cfged_out::inner::doesnt_exist::hello(); | ^^^^^^^^^^^^ could not find `doesnt_exist` in `inner` | note: found an item that was configured out --> $DIR/auxiliary/cfged_out.rs:6:13 | LL | pub mod doesnt_exist { | ^^^^^^^^^^^^ note: the item is gated here --> $DIR/auxiliary/cfged_out.rs:5:5 | LL | #[cfg(FALSE)] | ^^^^^^^^^^^^^ ```
67 lines
2.3 KiB
Rust
67 lines
2.3 KiB
Rust
#![allow(unexpected_cfgs)] // since we want to recognize them as unexpected
|
|
|
|
pub mod inner {
|
|
#[cfg(FALSE)] //~ NOTE the item is gated here
|
|
pub fn uwu() {}
|
|
//~^ NOTE found an item that was configured out
|
|
|
|
#[cfg(FALSE)] //~ NOTE the item is gated here
|
|
//~^ NOTE the item is gated here
|
|
//~| NOTE the item is gated here
|
|
pub mod doesnt_exist {
|
|
//~^ NOTE found an item that was configured out
|
|
//~| NOTE found an item that was configured out
|
|
//~| NOTE found an item that was configured out
|
|
pub fn hello() {}
|
|
pub mod hi {}
|
|
}
|
|
|
|
pub mod wrong {
|
|
#[cfg(feature = "suggesting me fails the test!!")]
|
|
pub fn meow() {}
|
|
}
|
|
|
|
pub mod right {
|
|
#[cfg(feature = "what-a-cool-feature")] //~ NOTE the item is gated behind the `what-a-cool-feature` feature
|
|
pub fn meow() {}
|
|
//~^ NOTE found an item that was configured out
|
|
}
|
|
}
|
|
|
|
mod placeholder {
|
|
use super::inner::doesnt_exist;
|
|
//~^ ERROR unresolved import `super::inner::doesnt_exist`
|
|
//~| NOTE no `doesnt_exist` in `inner`
|
|
use super::inner::doesnt_exist::hi;
|
|
//~^ ERROR unresolved import `super::inner::doesnt_exist`
|
|
//~| NOTE could not find `doesnt_exist` in `inner`
|
|
}
|
|
|
|
#[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
|
|
pub fn vanished() {}
|
|
|
|
fn main() {
|
|
// There is no uwu at this path - no diagnostic.
|
|
uwu(); //~ ERROR cannot find function
|
|
//~^ NOTE not found in this scope
|
|
|
|
// It does exist here - diagnostic.
|
|
inner::uwu(); //~ ERROR cannot find function
|
|
//~| NOTE not found in `inner`
|
|
|
|
// The module isn't found - we would like to get a diagnostic, but currently don't due to
|
|
// the awkward way the resolver diagnostics are currently implemented.
|
|
inner::doesnt_exist::hello(); //~ ERROR failed to resolve
|
|
//~| NOTE could not find `doesnt_exist` in `inner`
|
|
|
|
// It should find the one in the right module, not the wrong one.
|
|
inner::right::meow(); //~ ERROR cannot find function
|
|
//~| NOTE not found in `inner::right
|
|
|
|
// Exists in the crate root - we would generally want a diagnostic,
|
|
// but currently don't have one.
|
|
// Not that it matters much though, this is highly unlikely to confuse anyone.
|
|
vanished(); //~ ERROR cannot find function
|
|
//~^ NOTE not found in this scope
|
|
}
|