你能在 Rust 中弃用一个属性吗?

Can you deprecate an attribute in Rust?

提问人:Typhaon 提问时间:10/11/2023 更新时间:10/11/2023 访问量:51

问:

假设我有这个宏定义:

#[proc_macro_derive(Builder, attributes(builder, group, groups))]
#[proc_macro_error]
pub fn derive_builder(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    // -- snip --
}

我想弃用 ,并让用户改用。你不能简单地做:groupgroups

#[proc_macro_derive(Builder, attributes(builder, #[deprecated] group, groups))]

投掷警告目前仅在每晚可用

如何告诉用户逐步停止使用 ?group

Rust 属性 弃用 deprecation-warning rust-proc-macros

评论


答:

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
这其实真的很聪明!谢谢