展开目录
#代码质量#AI编程#Oxlint#TypeScript#开源#lint

拒绝「低证据」代码:anti-slop 用 15 条 Oxlint 规则对抗 AI 生成代码的废料问题

AI 生成代码的「slop」问题日益严重:低证据类型断言、幻觉 API、未知类型泛滥。开源项目 anti-slop 用 15 条 Oxlint 规则在提交前拦截这些模式。本文详解其规则分类、安装使用与设计哲学。

预计阅读 7 分钟

一句话总结

AI 编程助手让代码产出量激增,也让「能跑但不该通过审查」的低质量代码泛滥。开源项目 anti-slop 用 15 条 Oxlint 规则,在提交前拦截那些「低证据、低信号」的 TypeScript/JavaScript 模式——它不是追求绝对正确,而是拒绝 AI 时代的代码废料。


背景:AI 编程时代的「slop」问题

「Slop」这个词在 2024 年被牛津词典关注,最初形容低质量的 AI 生成内容。如今它有了编程语境下的新含义:AI 生成的那些「看起来能跑、实则埋雷」的代码

AI 编程助手在提升效率的同时,也系统性地放大了几类坏味道:

  • 为了通过类型检查而伪造证据:模型会无脑加 as any 或堆叠类型断言,让报错「消失」,却掩盖了真实的类型错误。
  • 幻觉 API:生成根本不存在的属性、方法、参数,运行时才暴露,静态检查难以发现。
  • 未知类型泛滥any / unknown 抹平了类型信息,IDE 补全和静态分析全面失效。
  • 反射滥用:用 Reflecttypeof 等动态机制绕过类型系统,把编译期错误推迟到运行期。

AI 生成代码的典型废料问题

这些问题有个共同点:它们不是语法错误,而是「低证据、低信号」的代码模式。传统的 ESLint 规则大多关注风格和可读性,很难系统性地拦截这类模式。


anti-slop 是什么?

anti-slop 是一个基于 Oxlint 的插件,提供 15 条「意见鲜明」的规则,专门拒绝低证据、低信号的 TypeScript 和 JavaScript 代码模式。

它的设计哲学非常明确:

  1. 不是 npm 依赖,而是要被 vendored(内置)的:README 明确说「复制规则到你的仓库,读它们,改成符合你团队标准的样子」——规则是可审计、可修改的起点,而非黑盒。
  2. 用 agent skill 分发:通过 npx skills add 让 AI 编程助手自动完成安装配置,这是它区别于传统 lint 工具的关键。
  3. 面向 AI 代码审查场景:规则针对的正是 AI 生成代码的高发坏味道。

项目 2026 年 8 月 12 日发布,使用 TypeScript 编写,标签包括 agent-skillslintingoxlinttypescript


15 条规则,四大分类

anti-slop 的 15 条规则分类

类型证据(5 条)—— 拒绝「伪造类型安全」

  • no-chained-type-assertions:拒绝嵌套类型断言(x as unknown as T),这是最典型的「伪造证据」
  • no-widen-then-assert:拒绝先拓宽再断言的自欺式写法
  • no-known-value-widening:拒绝显式地把值拓宽到宽泛类型
  • require-safety-comment-for-type-assertion:强制为类型断言写安全说明注释
  • no-known-value-widening 系列:拦截丢失类型信息的显式标注

未知类型(3 条)—— 拒绝「类型信息蒸发」

  • no-unknown-parameters:拒绝未知类型的函数参数
  • no-unknown-returns:拒绝未知类型的返回值
  • no-unknown-type-aliases:拒绝未知类型的类型别名

反射 / 动态(3 条)—— 拒绝「绕过类型系统」

  • no-reflect-apply / no-reflect-get:拒绝反射式动态调用
  • no-runtime-typeof:拒绝用运行时的 typeof 做类型判断

对象 / 模块(4 条)—— 拒绝「结构失控」

  • no-object-parameters:拒绝用「上帝对象」做函数参数
  • no-conditional-empty-object-spread:拒绝用 {} 做条件展开来省略字段
  • no-unsafe-dictionary-type:拒绝不安全的字典类型
  • no-module-mocking:拒绝模块 mock 等测试侧的模式滥用

这些规则的共同目标不是「绝对正确」,而是提高代码的证据标准——每一处类型断言、每一个未知类型,都需要明确的理由。


安装与使用

anti-slop 提供了两条安装路径:

anti-slop 安装流程

路径一:agent skill(推荐)

npx skills add dmmulroy/anti-slop --skill install-anti-slop

然后让 AI 编程助手「在当前仓库安装 anti-slop」。skill 会自动完成:复制插件 → 安装匹配版本的 oxlint@oxlint/plugins → 合并进现有 lint 配置 → 启用全部规则 → 校验结果。

路径二:手动安装

复制 src/ 到目标仓库(如 tools/oxlint/anti-slop/),然后在 oxlint.config.ts 注册:

import { defineConfig } from "oxlint";

export default defineConfig({
  jsPlugins: [
    { name: "anti-slop", specifier: "./tools/oxlint/anti-slop/index.ts" },
  ],
  rules: {
    "anti-slop/no-chained-type-assertions": "error",
    "anti-slop/no-unknown-parameters": "error",
    // ... 其余规则
  },
});

因为规则是被 vendored 进仓库的,团队可以自由地放宽、收紧或改写规则,让它们贴合自己的编码规范——这正是作者想传达的核心理念:规则是起点,不是终点。


为什么 lint 是对抗 AI slop 的有效武器?

AI 代码审查(AI code review)已经很常见,但它有个盲区:AI 审查 AI 生成的代码,容易被同一套偏见带偏。而 lint 规则是确定性的、可解释的、可强制在 CI 里执行的。

anti-slop 的价值正在于此:

  • 确定性:规则是明确的 AST 模式匹配,不存在「模型觉得没问题」的模糊地带
  • 可审计:每条规则都能读源码,理解它在拦截什么
  • 可进 CI:在提交前拦截,而不是等 code review 时靠人眼
  • 面向团队:规则可以被改写,沉淀成团队的编码共识

对于大量使用 AI 编程助手的团队来说,把「拒绝 slop」变成一条 lint 门槛,是成本最低、效果最直接的质量防线。


同类工具对比

工具定位拦截目标特色
anti-slopOxlint 插件低证据代码模式面向 AI 代码,agent skill 分发,可 vendored
ESLint通用 lint风格 + 潜在错误生态最大,规则海量,配置复杂
Oxlint快速 lint兼容 ESLint 规则Rust 实现,性能极佳,是 anti-slop 的底座
Biome一体化工具链格式 + lint快速,但规则偏风格向

anti-slop 的独特之处在于它的选题——不是再造一个通用 lint 工具,而是精准打击 AI 时代最让工程师头疼的那几类代码模式。


适合人群

  • 重度使用 AI 编程助手的团队:给 AI 生成的代码上一道质量门槛
  • TypeScript / JavaScript 开发者:关注类型安全和代码可维护性
  • 工程效能负责人:想把「代码证据标准」沉淀为团队规范
  • 对 AI 代码质量话题感兴趣的研究者

总结

  • AI 编程助手的普及系统性地放大了「低证据、低信号」代码的泛滥
  • anti-slop 用 15 条 Oxlint 规则精准拦截伪造类型断言、幻觉 API、未知类型、反射滥用等模式
  • 它的「vendored + agent skill 分发」设计,让规则可审计、可改写、可进 CI
  • 确定性 lint 是对抗 AI slop 最直接有效的武器之一
  • 面向团队的核心理念:规则是起点,不是终点

仓库地址github.com/dmmulroy/anti-slop

数据来源:GitHub API(2026-08-13 查询)、项目 README

Related

相关文章

延伸阅读

查看全部 →