假设我有这个宏定义:
#[proc_macro_derive(Builder, attributes(builder, group, groups))]
#[proc_macro_error]
pub fn derive_builder(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
// -- snip --
}
我想弃用
group
,并让用户使用 groups
来代替。你不能简单地这样做:
#[proc_macro_derive(Builder, attributes(builder, #[deprecated] group, groups))]
抛出警告目前仅每晚可用
如何告诉用户逐步停止使用
group
?
就像
compile_error!()
一样,扩展为对已弃用函数的调用。也许,最好的方法是从宏的支持库中使用已弃用的导出函数:
#[deprecated = "the `group` attribute is deprecated. Use `groups` instead"]
#[doc(hidden)]
pub const fn group() {}
并扩展到类似:
const _: () = ::my_crate::group();
当然,请确保设置正确的跨度,以便错误指向正确的位置。