My project using proc macro attribute fails to compile after updating to latest nighly Rust. Obviously, something in compiler changed, but errors are misleading.
Cargo.toml:
[workspace]
members = ["foo", "bar"]
foo/src/main.rs:
#![feature(proc_macro)]
#[macro_use] extern crate bar;
use bar::baz;
#[baz]
fn main() {
println!("Hello, world!");
}
bar/src/lib.rs:
extern crate proc_macro;
use proc_macro::TokenStream;
#[proc_macro_attribute]
pub fn baz(_attr: TokenStream, input: TokenStream) -> TokenStream {
input
}
Errors:
error[E0432]: unresolved import `bar::baz`> ] 1/2: rust-procattr
--> foo/src/main.rs:5:5
|
5 | use bar::baz;
| ^^^^^^^^ no `baz` in the root
error[E0658]: attribute procedural macros are experimental (see issue #38356)
--> foo/src/main.rs:7:1
|
3 | #[macro_use] extern crate bar;
| ------------ procedural macro imported here
...
7 | #[baz]
| ^^^^^^
|
= help: add #![feature(proc_macro)] to the crate attributes to enable
warning: unused `#[macro_use]` import
--> foo/src/main.rs:3:1
|
3 | #[macro_use] extern crate bar;
| ^^^^^^^^^^^^
|
= note: #[warn(unused_imports)] on by default
warning: unused import: `bar::baz`
--> foo/src/main.rs:5:5
|
5 | use bar::baz;
| ^^^^^^^^
error: aborting due to 2 previous errors
Some errors occurred: E0432, E0658.
For more information about an error, try `rustc --explain E0432`.
error: Could not compile `rust-procattr`.
To learn more, run the command again with --verbose.
How to fix it?