主要观点:
- 介绍了 Oxide 和 Friends 播客中关于为派生“diffable”数据结构创建 proc 宏的内容,以及相关的 Rust 宏知识。
- 解释了宏输出对
rust-analyzer
的重要性,以及 Daft 宏如何实现输出代码和错误。 - 讨论了何时输出代码和错误,以及是否所有 proc 宏都应输出代码和错误。
- 介绍了错误累积的概念和 Daft 中实现错误累积的方式,以及另一种
syn::Error
累积模式。
关键信息:
rust-analyzer
在遇到错误时会尝试继续渲染类型提示,宏输出应尽可能包含有效源代码。- Daft 宏通过收集错误并在可能时继续生成代码,以部分生成的代码和错误的形式输出。
- 快照测试中的三种失败类:输出代码和错误(警告错误)、只输出代码无错误(编译错误)、只输出错误无代码(错误)。
- 每个 proc 宏都应积累错误,以提供更好的用户体验,可通过传递错误累积器或使用
syn::Error::combine
实现。
重要细节:
- Daft 宏的入口点是
internal::derive_diffable
,返回DeriveDiffableOutput
,包含生成的有效代码和错误列表。 - 错误累积模式可避免只返回第一个错误,鼓励捕获和输出所有错误。
- 介绍了一种基于
syn::Error::combine
的错误累积模式及其在函数签名固定时的用途和缺点。 - 作者正在制作 proc-macro 教程,欢迎读者分享实际世界中的模式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。