prettyplease
prettyplease copied to clipboard
bug: Dropping semicolons for macros in non-let positions
This input:
#[test]
fn weird_macro() {
let contents = r##"
fn main() {
move |_| {
drop_macro_semi! {
"something_very_long_something_very_long_something_very_long_something_very_long"
}; // <--- semicolon here
let _ = drop_macro_semi! {
"something_very_long_something_very_long_something_very_long_something_very_long"
};
drop_macro_semi! {
"something_very_long_something_very_long_something_very_long_something_very_long"
};
};
}
"##;
let expr: File = syn::parse_file(contents).unwrap();
let out = unparse(&expr);
println!("{}", out);
}
Returns
fn main() {
move |_| {
drop_macro_semi! {
"something_very_long_something_very_long_something_very_long_something_very_long"
} // <--- no semicolon here
let _ = drop_macro_semi! {
"something_very_long_something_very_long_something_very_long_something_very_long"
};
drop_macro_semi! {
"something_very_long_something_very_long_something_very_long_something_very_long"
}
};
}
Dropping the semicolon on the first macro leads to semantically different code and thus compile errors.
This is likely because we're dropping the semicolon explicitly depending on the delimiter which just seems wrong to me - can't a macro have any delimiter without its semantic meaning changing?
https://github.com/dtolnay/prettyplease/blob/master/src/mac.rs#L46C17-L46C31