用途:当函数、trait、泛型与构建脚本无法清晰表达语法转换或机械生成时,用宏来完成,并保持生成的 API 比宏实现更小、更稳定。适用范围包括 macro_rules!、声明式 DSL、derive 宏、属性宏、函数式过程宏、解析、token 生成、卫生性、诊断信息与展开测试。
主要能力与工作流:先写出代表性调用与预期展开,证明宏是正确的边界;优先考虑函数、trait、生态已有 derive 或手写实现。按需求选最小宏类别:匹配重复 Rust token 用 macro_rules!,为被标注类型实现 trait 用 derive 过程宏,转换被标注条目用属性宏,解析自定义 token 调用用函数式过程宏。过程宏应放在专门的 proc-macro = true crate,共享运行时 trait 与类型放在普通库 crate。
命名约定:仅含 #[proc_macro_derive] 入口的包用 -derive 后缀,含属性宏、函数式宏或混合宏的用 -macros;默认不要同时发布 <name>-derive 与 <name>-macros,除非用户可独立采用且拆分能显著减少依赖或编译时间、分离兼容策略或所有权边界。
实现要点:宏匹配臂由具体到一般;正确使用 expr、ident、ty、pat、item、meta、path、tt 等片段说明符;按公开语法决定是否支持可选尾分隔符;用 $crate 指向定义 crate;避免重复求值、隐藏移动、意外控制流与标识符冲突;避免对大输入使用二次方 TT muncher。过程宏用 syn、quote 结构化解析,保留 span 并合并 syn::Error,保留泛型、生命周期、const 参数、where 子句、属性与可见性,不要对无效输入 panic。
测试与限制:用 cargo fmt --all --check、cargo check --workspace --all-targets --all-features、cargo test --workspace --all-targets --all-features、cargo clippy --workspace --all-targets --all-features -- -D warnings、cargo expand --package example-crate 做多层验证,并用 trybuild 或同类 UI 测试锁定接受/拒绝语法与诊断。展开快照只是审查辅助,不是唯一正确性门槛。发布前审查清单与完成标准见资料,收费、价格、平台等信息暂未提供。该技能不收集、存储或传输用户数据。