从零实现增量源生成器 · 第 11 / 17 篇

为什么 hint name 不是随便起一个文件名

hint name 决定生成文件的身份边界;对嵌套类型和多目标输入来说,它不是装饰,而是稳定输出的一部分。

很多第一版生成器会把 hint name 写成固定字符串,能跑就行。这个做法在单目标样例里可能没问题,一旦目标类型变多,很快就会碰撞。

当前项目会根据目标类型和外层嵌套结构构造 hint name,最终形成类似:

  • Outer.Inner.Target.g.cs

为什么这件事不能随意

因为生成文件需要稳定身份。

hint name 一旦不稳定,就会带来这些问题:

  • 相同目标在不同构建中产出文件名漂移
  • 多个目标类型相互覆盖
  • 调试生成文件时难以定位来源

文件身份稳定,测试和排错才稳定

这件事看起来像细枝末节,其实很工程化。一个可维护的生成器,不只是要“生成对的代码”,还要“持续生成同一份身份明确的代码”。

教程导航

继续阅读

当前文章已经挂到教程顺序中,建议按相邻章节继续。

上一篇 ToString 渲染层到底在解决什么问题 代码渲染不只是拼一段字符串,它要负责重新打开命名空间、嵌套类型和目标类型,并保证输出代码可编译。 下一篇 可空、泛型与嵌套类型,为什么总是高风险回归点 主路径一旦能跑,最容易被忽略的就是可空、泛型和嵌套类型;而这些恰恰最容易让生成器在真实项目里失效。
查看系列目录 查看全部文章

标签

分类