文档文章

Traversal explained

Traversal 把走树逻辑集中起来,让 generator 和 analyzer 更专注在自己的职责上。

概念7 分钟

Traversal 是对 Shape IR 的统一遍历机制,不管你是在生成输出、收集 diagnostics,还是未来做分析,都应该尽量复用同一套走树逻辑。

当 Shape IR 成为共享契约后,traversal 就成了避免代码库里重复递归逻辑的关键杠杆点。

适合人群
学习者
难度
中级
最近更新
2026年7月27日
Shape IR
先回看 Shape IR 这一层共享表示。
Custom generators
看看 traversal 未来会如何支撑 generator 逻辑。

为什么 traversal 很重要

如果没有共享 traversal 层,每个 parser、generator 和 analyzer 都会重新写一套略有不同的递归规则。

这些重复实现往往会引入细微但麻烦的不一致。统一 traversal 模型能显著降低这种风险。

好的 traversal 层应该提供什么

这些规则能让 traversal 同时服务于当前 generator,以及后续更高层的工具能力。

  • 按确定性的顺序遍历节点。
  • 传递可扩展的上下文。
  • 把遍历逻辑和渲染或分析副作用分离。

一套 walker,多种用途

具体 API 未来可以继续演进,但重要的是同一套 traversal contract 可以服务多个下游行为。

简化版 traversal 草图

ts
function visitShape(shape: Shape, visitor: Visitor) {
  visitor.enter?.(shape);

  if (shape.kind === "array") {
    visitShape(shape.element, visitor);
  }

  if (shape.kind === "object") {
    for (const field of Object.values(shape.fields)) {
      visitShape(field, visitor);
    }
  }

  visitor.exit?.(shape);
}