[−][src]Static rustc_ap_rustc_lint_defs::builtin::PROC_MACRO_DERIVE_RESOLUTION_FALLBACK
pub static PROC_MACRO_DERIVE_RESOLUTION_FALLBACK: &Lint
The proc_macro_derive_resolution_fallback
lint detects proc macro
derives using inaccessible names from parent modules.
Example
ⓘ
// foo.rs #![crate_type = "proc-macro"] extern crate proc_macro; use proc_macro::*; #[proc_macro_derive(Foo)] pub fn foo1(a: TokenStream) -> TokenStream { drop(a); "mod __bar { static mut BAR: Option<Something> = None; }".parse().unwrap() }
ⓘ
// bar.rs #[macro_use] extern crate foo; struct Something; #[derive(Foo)] struct Another; fn main() {}
This will produce:
warning: cannot find type `Something` in this scope
--> src/main.rs:8:10
|
8 | #[derive(Foo)]
| ^^^ names from parent modules are not accessible without an explicit import
|
= note: `#[warn(proc_macro_derive_resolution_fallback)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #50504 <https://github.com/rust-lang/rust/issues/50504>
Explanation
If a proc-macro generates a module, the compiler unintentionally allowed items in that module to refer to items in the crate root without importing them. This is a future-incompatible lint to transition this to a hard error in the future. See issue #50504 for more details.