SuperAPI AI 工具集

render-code-shape

编程与开发

查看项目

更新于 10-16 11:29

技能介绍

用途

Render Code Shape 用于渲染代码的形状:模块边界、跨边界的类型、签名,以及带引用来源的调用图。它面向已经存在的代码,也面向即将构建的改动。

代码有一条“水线”。水线之上是形状:模块及其边界,跨越这些边界的类型和值,签名,以及调用实际发生的顺序。水线之下是语法和函数体内的语句。渲染形状时,水线以下的一切折叠为一行意图描述。只有函数体是伪码——每个名称、类型和路径都从源码中读取,并按文件与行号引用,或被标记为 [NEW]。

主要能力

  • 渲染类型:声明每个跨越边界的类型、接口或模式及其字段;来自框架外部的类型会被命名并标记为外部。
  • 渲染边界:每个模块一行,说明它拥有什么、暴露什么、依赖什么,以及在其表面之后隐藏什么。
  • 渲染签名:按模块分组,每个签名携带参数名、参数类型、返回类型和错误类型,均按源码原样;每个函数体折叠为一行意图。
  • 渲染调用图:每种 wiring 一张图,以缩进树形式呈现,每条边读取为 → Receiver.method(arg: Type, arg: Type) : Return,随后是注解,然后是文件与行号;同层调用按执行顺序排列。
  • 注解非普通边:对非无条件进程内调用,至少标注一种:[if …]、[each …]、[async]、[error …]、[boundary: …]、[NEW]。

使用方式

  1. 框定渲染范围:命名要追踪的入口点和框架边缘(视为外部的包、服务、库),命名每种要渲染的 wiring:生产环境,以及任何替换依赖的组合根(如测试、本地开发、特性开关)。将每个入口点分类为 existing 或 [NEW]。对 [NEW] 渲染,确定其必须满足的需求以及它所附着的现有代码。优先选择能回答所问问题的最窄框架。

  2. 读取部件:从每个入口点跟随每一次调用,打开路径上的每个文件。对到达的每个函数,记录其文件与行号、原样签名、产生的效果以及它发起的调用。扩展一条路径,直到它到达边界穿越、纯叶子、框架边缘或已记录的函数;路径不在其他地方结束。对 [NEW] 渲染,以同样的严谨度读取改动所附着的周围模块;尚不存在的部分从需求推导并标记。阅读源码——凭记忆、从名称推断或从旧版本沿用的签名都是捏造,即使碰巧正确;引用使差异可核查。

  3. 渲染形状:使用项目自身的语言和命名——术语表中的术语,而不是同义词。三部分:类型、边界、签名。当切分不明显时,按表格判断:进程外效果(网络、数据库、文件系统、时钟、随机、环境)在水线之上,纯本地计算在水线之下;改变下游调用发生的分支在水线之上,只改变返回值的水线之下;效果跨越模块边界的辅助函数在水线之上,包含在内部的私有辅助函数在水线之下;构造和注入的位置在水线之上,框架和传输样板在水线之下。

  4. 渲染调用图:每种 wiring 一张图,作为缩进树。每条边读取为 → Receiver.method(arg: Type, arg: Type) : Return,然后是注解,然后是文件与行号。同层调用按执行顺序排列。已绘制过的函数以 → Name (above) 代替二次展开。

  5. 返回渲染结果:先给出入口点、框架边缘和绘制的 wiring。然后给出类型、边界表、签名和调用图。以形状所显示的内容结尾,陈述为渲染中已可见的事实而非判断:依赖循环、与模块分层相反的依赖、参数数量、被许多调用者到达的函数、主路径上的边界穿越、没有 wiring 覆盖的路径。命名未读取的内容及原因。

适用场景

  • 询问某物如何组合时
  • 追踪一个请求实际触及了什么时
  • 在实现改动之前进行伪码化时
  • 快速上手陌生路径时
  • 生成计划及其测试将要核对的形状时

限制

  • 只读:渲染是交付物,而非编辑。生成渲染从不授权更改生产代码、测试或配置。只有在请求单独授权时才实施,且须遵循管辖工作流——行为变更用 tdd,行为保持工作用 refactoring 或 reduce-system-complexity。
  • 渲染不是裁决:它陈述渲染中可见的内容。判断边界是否画得好属于 codebase-design;判断文件应放在哪里属于 structure-codebase;排列架构投资优先级属于 improve-codebase-architecture。
  • 应与其他技能配合加载:planning、codebase-design、structure-codebase、finding-seams、characterisation-tests、diagrams、technical-writing。
  • 反模式包括:凭记忆或代码摘要渲染而不打开文件;未阅读就从旧版本沿用或从名称推断签名;把每条路径都扩展到叶子导致无人阅读;滑到水线以下用散文复述语句、控制流细节和框架样板;静默混合 [NEW] 和现有名称;当测试或特性开关组合根替换依赖并改变图时只绘制生产 wiring;以判断结尾而非事实;在渲染期间编辑代码;渲染 [NEW] 形状后直接实现,跳过 tdd 要求的失败行为测试。

完成检查

  • 渲染中的每个名称、类型和路径是否解析到当前树中的文件和行号,或带有 [NEW]?
  • 框架边缘是否明确,每个替换依赖的 wiring 是否与生产环境并排绘制?
  • 每条路径是否终止于边界、纯叶子、框架边缘或已绘制的函数?
  • 每个模块行是否说明它隐藏什么,而不仅是暴露什么?
  • 每条非普通调用图边是否被注解,每条边是否命名了跨越它的值?
  • 结尾观察是否是渲染中可见的事实,决策是否路由到拥有它们的技能?
  • 渲染是否保持只读,未读取的区域是否被命名而非悄悄省略?