P.MAC.02 实现宏语法的时候,应该尽量贴近 Rust 语法
【描述】
Rust 宏可以让开发者定义自己的 DSL,但是在使用宏的时候,要尽可能贴近 Rust 的语法。这样可以增强可读性,让其他开发者在使用宏的时候,可以猜测出它生成的代码。
【反例】
#![allow(unused)] fn main() { // 不符合:无关键词 bitflags! { S: u32 { /* ... */ } } // 不符合:或使用一些自定义的特定用途关键词 bitflags! { flags S: u32 { /* ... */ } } // 或 bitflags! { struct S: u32 { const E = 0b010000, // 不符合:结尾应该是分号更符合 Rust 语法 const F = 0b100000, } } }
【正例】
#![allow(unused)] fn main() { bitflags! { struct S: u32 { /* ... */ } // 符合 } // 符合:结尾是正确的分号 bitflags! { struct S: u32 { const C = 0b000100; const D = 0b001000; } } }