mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-02 19:53:46 +00:00
a647ba250a
`#[cfg]`s are frequently used to gate crate content behind cargo features. This can lead to very confusing errors when features are missing. For example, `serde` doesn't have the `derive` feature by default. Therefore, `serde::Serialize` fails to resolve with a generic error, even though the macro is present in the docs. This commit adds a list of all stripped item names to metadata. This is filled during macro expansion and then, through a fed query, persisted in metadata. The downstream resolver can then access the metadata to look at possible candidates for mentioning in the errors. This slightly increases metadata (800k->809k for the feature-heavy windows crate), but not enough to really matter.
23 lines
420 B
Rust
23 lines
420 B
Rust
pub mod inner {
|
|
#[cfg(FALSE)]
|
|
pub fn uwu() {}
|
|
|
|
#[cfg(FALSE)]
|
|
pub mod doesnt_exist {
|
|
pub fn hello() {}
|
|
}
|
|
|
|
pub mod wrong {
|
|
#[cfg(feature = "suggesting me fails the test!!")]
|
|
pub fn meow() {}
|
|
}
|
|
|
|
pub mod right {
|
|
#[cfg(feature = "what-a-cool-feature")]
|
|
pub fn meow() {}
|
|
}
|
|
}
|
|
|
|
#[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
|
|
pub fn vanished() {}
|