为 AI 生成代码写 lint 规则:最难的是拒绝重复造轮子

Goldziher · reddit · 2026-08-31

作者维护一个 linter,将 ruff、oxc、biome、mago 作为库编译,并添加自己的 ast-grep 规则包,针对 agent 输出的失败模式(如编译通过的桩、无断言的测试、静默丢弃的错误、无理由的抑制注释)。

核心约束:拒绝重复 tier-1 后端的规则。通过按语言延迟表,避免重复报告 ruff 的 C901、PLR0913 或 oxlint 的 max-depth 等。这删除了大多数想先写的规则,因为现有工具已覆盖大部分。

幸存规则(JS/TS):无断言的测试体、整个函数体为 throw new Error("Not implemented")、空的 .catch(() => {});Python:无 assert 和 pytest.raises 的 test 函数、抽象方法外的 raise NotImplementedError 作为整个函数体。

默认关闭:26 条规则中 13 条默认关闭,每条都附有语料测量数据。例如,捕获 Rust todo!() 的规则报告 324 个发现,其中 320 个在生成的 FFI 胶水代码中,手写代码中 4 个有 3 个是真实桩,1 个是 mock,25% 的误报率不足以启用。另一条规则 100% 正确但 94.4% 在 vendored FFI 绑定中,只有 1% 在第一方代码中,正确和可操作是不同的问题。

模式:大部分噪音是路径形状而非模式形状,AST 模式无法表达“不在生成输出中”。

结论:规则是便宜的部分,决定是否启用需要针对真实语料测量并愿意说“不”。

项目:github.com/Goldziher/poly(Rust, MIT)

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →