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

第一版 GenerateToString 生成器,先把主链路跑通

第一版生成器不求复杂,只求把入口、发现、诊断和输出这条最小闭环跑通。

第一版生成器最容易犯的错误,是一上来就去追求“支持所有语法细节”。更稳的做法,是先把最小闭环跑通。

当前主案例的入口很直接:

public sealed class TutorialIncrementalGenerator : IIncrementalGenerator
{
    public void Initialize(IncrementalGeneratorInitializationContext context)
    {
        // 注册特性、发现目标、输出代码
    }
}

这一版先解决什么

第一版只解决四件事:

  • 让用户能标记目标类型
  • 能发现被标记的类型
  • 能提取生成所需的最小信息
  • 能产出一份可编译的 ToString()

这一步不追求花样,而是建立一条稳定主链路。后面的泛型、可空、嵌套类型、诊断细化,都是在这条主链路之上往外扩。

为什么要先跑最小闭环

因为只有闭环跑通,你才知道当前问题卡在:

  • 入口阶段
  • 目标发现阶段
  • 模型提取阶段
  • 输出阶段

如果一开始就混入太多边界条件,出了错你甚至无法判断是发现逻辑错了,还是渲染逻辑错了。

第一版的价值,不在功能多

第一版的价值,是证明“这个生成器已经活了起来”。等你有了最小可运行闭环,再去做诊断、约束和测试补强,节奏会稳很多。

教程导航

继续阅读

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

上一篇 项目结构与协作关系,要用生成器视角去看 看教程仓库时,不要只看文件树;更重要的是理解生成器项目、示例项目和测试项目之间怎样构成一条完整反馈回路。 下一篇 PostInitialization 为什么适合生成特性 把特性放到 PostInitialization 里生成,可以减少手写样板、降低接入成本,并让目标发现的入口更稳定。
查看系列目录 查看全部文章

标签

分类