提问人:Typhaon 提问时间:10/11/2023 更新时间:10/11/2023 访问量:51
你能在 Rust 中弃用一个属性吗?
Can you deprecate an attribute in Rust?
问:
假设我有这个宏定义:
#[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
答:
2赞
Chayim Friedman
10/11/2023
#1
就像 一样,展开到对已弃用函数的调用。也许,最好的方法是从宏的支持库中获取一个已弃用的导出函数:compile_error!()
#[deprecated = "the `group` attribute is deprecated. Use `groups` instead"]
#[doc(hidden)]
pub const fn group() {}
并扩展到类似以下内容:
const _: () = ::my_crate::group();
当然,请确保设置正确的跨度,以便错误指向正确的位置。
评论
0赞
Typhaon
10/11/2023
这其实真的很聪明!谢谢
评论