GitHub 3.1k Star:anti-slop
从零部署完整教程 · 新手照着做就能跑起来 · 效率工具指南 · 原创教程
摘要:anti-slop 是 GitHub 3.1k Star 的 Oxlint 规则插件,拦截 TypeScript/JavaScript 代码中的"低证据"模式(AI slop)——链式类型断言、unknown 参数/返回、无 SAFETY 注释的强制转换等。本文介绍安装配置、16 条规则详解与正反例对照、真实拦截演示。
AI 写的代码,编译能过、跑起来也对,但总有些地方"看着就不对劲"——滥用as断言伪造类型、到处unknown逃避检查、强制转换连注释都不写。这种代码叫 AI slop(水货):能跑,但没依据、难维护。anti-slop 是一组 Oxlint 规则,专门拦截这些低证据模式。
本文要点
- 16 条 Oxlint 规则,拦截 AI 代码的"低证据"模式;
- 规则可复制进自己仓库,改成团队标准;
- 一条命令装(npx skills add)或手动配置;
- 本文含规则正反例对照 + 真实拦截演示。
一、GitHub 项目数据
| 项目 | 数据 |
|---|---|
| Star | 3,163(3.1k,2026-08 创建,增长快) |
| 主要语言 | TypeScript |
| 许可证 | MIT |
| 运行环境 | Oxlint(Rust 写的 JS/TS lint 器) |
| 适用 | TypeScript / JavaScript 项目 |
二、它能解决什么问题
| 你的痛点 | anti-slop 怎么解决 |
|---|---|
| AI 代码滥用 as 断言"伪造类型证据" | no-chained-type-assertions 拦截链式断言 |
| 到处 unknown 逃避类型检查 | no-unknown-parameters/returns 拒绝 |
| 断言无注释,谁改谁踩坑 | require-safety-comment 强制写依据 |
| 代码"能跑但没依据",难维护 | 把"低证据"模式挡在 CI/提交前 |
三、安装
路径 1:Agent Skill 一键装(让 AI 自动配置):
npx skillsadddmmulroy/anti-slop--skillinstall-anti-slop路径 2:手动配置(实测走通):
# ① 复制规则源码到项目mkdir-ptools/oxlint/anti-slopcp-rsrc/* tools/oxlint/anti-slop/# ② 装 Oxlintnpminstall-Doxlint @oxlint/plugins# ③ 配 oxlint.config.ts(注册插件 + 启用规则,package.json 需 "type": "module")# ④ 运行npx oxlint src/四、规则怎么用(重点:正反例)
下面是 6 条最典型的规则,每条都有「会被拦的写法 ❌」和「该这么写 ✅」对照。
1. no-chained-type-assertions(链式类型断言)
// ❌ 被拦:一步步"假装"类型,丢弃证据constuser=inputasobjectasUser;// ✅ 该写:在边界处解析/校验,保持精确类型2. no-unknown-parameters(unknown 入参)
// ❌ 被拦:unknown 意味着"没解析就收"functionhandle(input:unknown){}// ✅ 该写:接受命名域类型,I/O 边界跑 schema 后再进函数3. no-unknown-returns(unknown 返回)
// ❌ 被拦:把责任甩给调用方functionloadUser():unknown{returninput;}// ✅ 该写:边界解析后返回命名域类型(如 UserId)4. no-unsafe-dictionary-type(不安全字典类型)
// ❌ 被拦:调用方拿不到具体值契约typeMetadata=Record<string,unknown>;// ✅ 该写:用 schema 推导的具体值类型,外部数据先解析5. require-safety-comment-for-type-assertion(断言要写 SAFETY 注释)
// ❌ 被拦:没写为什么安全constuserId=valueasUserId;// ✅ 该写:// SAFETY: parseUserId validated the identifier before branding it.constuserId=valueasUserId;6. no-module-mocking(禁止模块 mock)
// ❌ 被拦:mock 掩盖真实依赖vi.mock("./user-store");// ✅ 该写:用真实依赖注入(dependency seams)替代模块 mock全部 16 条规则:no-chained-type-assertions、no-conditional-empty-object-spread、no-known-value-widening、no-module-mocking、no-object-parameters、no-reflect-apply、no-reflect-get、no-runtime-typeof、no-shape-in-symbol-names、no-unknown-parameters、no-unknown-returns、no-unknown-type-aliases、no-unsafe-dictionary-type、no-widen-then-assert、require-safety-comment-for-type-assertion、Effect 的 no-service-constructor-imports。
五、功能验证(真实输出)
本机实测(npm 项目 + oxlint + anti-slop 插件):
- slop 代码被拦:5 种低证据模式 → 7 errors:
x anti-slop(no-chained-type-assertions): discards type evidence... x anti-slop(no-unknown-parameters): Parameter `input` leaves input unparsed... x anti-slop(no-unknown-returns): exposes `unknown` to its caller... x anti-slop(no-unsafe-dictionary-type): unknown value type... x anti-slop(require-safety-comment-for-type-assertion): No `SAFETY:`... Found 6 warnings and 7 errors.- 健康代码不误报:有 SAFETY 注释 + 边界解析的代码 → 0 errors ✅
六、常见问题
Q1:anti-slop 是 npm 包吗?
不是固定依赖。作者设计成"复制进你仓库、改造成团队标准"(vendored)——复制 src/ 后这些规则就是你的了。
Q2:需要 ESLint 吗?
不需要。它基于 Oxlint(Rust 写的极快 lint 器),npm install oxlint 即可。
Q3:规则太严格怎么办?
规则源码在你仓库里,改配置/删规则/调 severity 都行——这正是 vendored 设计的初衷。
Q4:只适合 AI 生成的代码吗?
不。任何"低证据"代码都会被拦,只是 AI 时代这类代码变多了。
七、总结
anti-slop 是一组"反 AI 水货"的代码规则:拒绝链式断言、unknown 泛滥、无注释的强制转换——逼着你写"有依据"的代码。适合用 AI 写代码、又想保持代码质量的团队。规则可复制可定制,Oxlint 极快不拖慢开发。记住:规则挡的是"没依据",不是"不能用类型断言"——写清楚依据就好。
命令速查
# 1. Agent Skill 一键装npx skillsadddmmulroy/anti-slop--skillinstall-anti-slop# 2. 手动装mkdir-ptools/oxlint/anti-slop&&cp-rsrc/* tools/oxlint/anti-slop/npminstall-Doxlint @oxlint/plugins# 3. package.json 加 "type": "module",配置 oxlint.config.ts# 4. 运行检查npx oxlint src/项目地址:[dmmulroy/anti-slop] (https://github.com/dmmulroy/anti-slop)
标签:anti-slop、Oxlint、代码质量、TypeScript、AI代码、Lint、效率工具