Open
Description
I ran into some issues with rustc 1.58.0-nightly (b426445 2021-11-24).
I have the following code:
#![feature(decl_macro)]
pub macro generate_class_new($name: ident) {
pub struct $name {
x: i32
}
impl $name {
pub fn new(x: i32) -> Self {
Self { x }
}
}
}
generate_class_new!(MyTestClass);
fn main() {
let instance = MyTestClass::new(3);
}
What I try to do here is creating a macro that just creates a struct with a given identifier as a name.
When I call MyTestClass::new(3), the compiler complains that this function does not exist:
error[E0599]: no function or associated item named `new` found for struct `MyTestClass` in the current scope
--> src/main.rs:18:33
|
4 | pub struct $name {
| ---------------- function or associated item `new` not found for this
...
18 | let instance = MyTestClass::new(3);
| ^^^ function or associated item not found in `MyTestClass`
running cargo expand produces code that should work in my opinion:
#![feature(prelude_import)]
#![feature(decl_macro)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
pub macro generate_class_new($ name : ident) {
pub struct $name {
x: i32,
}
impl $name {
pub fn new(x: i32) -> Self {
Self { x }
}
}
}
pub struct MyTestClass {
x: i32,
}
impl MyTestClass {
pub fn new(x: i32) -> Self {
Self { x }
}
}
fn main() {
let instance = MyTestClass::new(3);
}
Not sure if I'm doing something wrong here, but it pretty much looks like a bug for me