#cfg-attr #attributes #derive

mass-cfg-attr

在属性上批量切换cfg-attr的方法

2个不稳定版本

0.2.0 2023年1月23日
0.1.0 2023年1月23日

#726 in 过程宏

MIT 许可证

18KB
378

Mass Cfg Attr

这个自定义 derive 宏允许你将多个属性包装在同一个 #[cfg_attr(..., ...)]

例如,你可能正在使用另一个自定义 derive 来标记方法进行额外连接,但在测试运行时,这种额外连接将不起作用。为了解决这个问题,你不得不反复使用 cfg_attr。这增加了额外的工作量,使代码更难阅读,并增加了额外的风险。 mass_cfg_attr 有助于缓解这些问题

没有 mass_cfg_attr:

#[derive(SomeAutoWirer)]
struct MyStruct;

#[cfg_attr(not(any(test, doctest)), auto_wire)]
impl MyStruct {
    #[cfg_attr(not(any(test, doctest)), wire(options))]
    fn func_one(self) {
        // ...
    }

    #[cfg_attr(not(any(test, test)), wire(options))] // mistake the compiler won't see
    fn func_two(self) {
        // ...
    }

    #[cfg_attr(not(any(test, doctest)), wire(options))]
    fn func_three(self) {
        // ...
    }
}

有 mass_cfg_attr

#[derive(SomeAutoWirer)]
struct MyStruct;

#[mass_cfg_attr(not(any(test, doctest)), [auto_wire, wire, wire_more])]
#[auto_wire]
impl MyStruct {
    #[wire(options)]
    fn func_one(self) {
        // ...
    }

    #[wire(options)]
    fn func_two(self) {
        // ...
    }

    #[wire_more(options)]
    fn func_three(self) {
        // ...
    }
}

依赖项

~280KB