P.MAC.PRO.03 保证过程宏的卫生性
【描述】
过程宏生成的代码尽量使用完全限定名,防止命名冲突产生意想不到的后果。
可以使用 #![no_implicit_prelude]
属性来验证过程宏的卫生性。
#![allow(unused)] #![no_implicit_prelude] fn main() { #[derive(MyMacro)] struct A; }
【反例】
#![allow(unused)] fn main() { quote!(a.to_string()) }
【正例】
#![allow(unused)] fn main() { quote!(std::string::ToString::to_string(a)) }
#![allow(unused)] fn main() { quote! {{ use std::string::ToString; a.to_string() }} }