一个愚蠢的过程宏技巧:如何发出部分代码 + 错误

主要观点:

  • 介绍了 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 教程,欢迎读者分享实际世界中的模式。
阅读 11
0 条评论