从零实现增量源生成器 · 第 4 / 17 篇
第一版 GenerateToString 生成器,先把主链路跑通
第一版生成器不求复杂,只求把入口、发现、诊断和输出这条最小闭环跑通。
第一版生成器最容易犯的错误,是一上来就去追求“支持所有语法细节”。更稳的做法,是先把最小闭环跑通。
当前主案例的入口很直接:
public sealed class TutorialIncrementalGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
// 注册特性、发现目标、输出代码
}
}
这一版先解决什么
第一版只解决四件事:
- 让用户能标记目标类型
- 能发现被标记的类型
- 能提取生成所需的最小信息
- 能产出一份可编译的
ToString()
这一步不追求花样,而是建立一条稳定主链路。后面的泛型、可空、嵌套类型、诊断细化,都是在这条主链路之上往外扩。
为什么要先跑最小闭环
因为只有闭环跑通,你才知道当前问题卡在:
- 入口阶段
- 目标发现阶段
- 模型提取阶段
- 输出阶段
如果一开始就混入太多边界条件,出了错你甚至无法判断是发现逻辑错了,还是渲染逻辑错了。
第一版的价值,不在功能多
第一版的价值,是证明“这个生成器已经活了起来”。等你有了最小可运行闭环,再去做诊断、约束和测试补强,节奏会稳很多。
教程导航
继续阅读
当前文章已经挂到教程顺序中,建议按相邻章节继续。