Anti-Slop:反低证据代码模式的 Oxlint 规则集
拒绝 TypeScript/JavaScript 中低证据、低信号代码模式的 Oxlint 规则,可整体打包为 Agent Skill 安装到你的仓库。
安装脚本在本地复制文件、拒绝覆盖已有目录、明确要求版本精确匹配并记录来源(UPSTREAM.md);无网络外传、无危险默认、权限最小。扣分:用户确认环节依赖代理执行、install.mjs 源码未在证据中展示、发布者身份未验证。
SKILL.md 步骤自洽、完成条件明确、失败处理(拒绝覆盖、报告诊断)清晰;仓库含 RuleTester 测试套件与 CI。扣分:核心脚本 install.mjs 未在证据中展示,静态评审未执行,测试覆盖的是规则而非安装关键路径。
受众(TypeScript/JavaScript 仓库)与触发词(install/update/upgrade/migrate)明确,效果规则的适用边界、规则分析局限均有详尽披露;fresh/update 路径区分清晰。扣分:边界与局限虽多但触发精度依赖代理判断,无中文支持说明;核心依赖 npm/oxlint 可达性对大陆网络基本可用但未经核实。
文档分层良好(SKILL.md→README→vendored LICENSE/UPSTREAM.md),MIT 许可明确,版本 0.1.2,CI 含 skill 资产漂移检查,维护路径清晰。扣分:无正式 changelog,更新流程部分依赖代理阅读仓库状态,版本记录仅靠 package.。
任务(安装/配置 vendored Oxlint 规则)定义清晰,输出直接可用(规则清单、配置片段、示例详尽),相对手工安装有明确边际价值。扣分:静态评审未验证实际执行结果,安装脚本行为不可复核。
README 提供 violation 示例与规则边界说明,仓库含真实 CI 工作流与 23 个测试文件的执行入口,可审计材料充分。扣分:测试文件本体未在证据中展示,关键主张(规则行为)无法在静态评审中独立复现,上限 5。
- 安装脚本 install.mjs 本体未在本次证据中展示,使用前建议人工审阅其行为;
- 规则为语法级(ESTree/词法作用域),不解析类型或跨文件签名,不能声称覆盖所有违例模式;
- 启用全部规则为 error 级别,会在存量代码上产生大量报告,首次使用建议先评估影响面;
- 未声明中文支持,依赖 npm 与 oxlint 生态,大陆网络可达性未经核实。
这个 Skill 能做什么,适合哪些场景?
Anti-slop 是 dmmulroy 维护的一套主观性 Oxlint 规则,旨在拦截 TypeScript 和 JavaScript 中常见的低证据模式,例如链式 as 断言、unknown 参数与返回值、reduce 中累积拷贝、运行时 typeof 窄化等。项目设计为被 vendor(vendor 到仓库)而非 npm 依赖:规则源码连同许可证和来源记录一并复制进你的仓库,由你自行维护和修改。配套的 Agent Skill 会自动复制插件、匹配安装 @oxlint/plugins 依赖、合并 lint 配置并启用全部通用规则。对直接依赖 Effect 的仓库,还可启用一组可选的 Effect 架构规则。
读取目标仓库的 agent 指令与 git status,识别包管理器与现有 lint 配置;运行 node <skill>/scripts/install.mjs 将插件复制到 tools/oxlint/anti-slop/(可指定其他路径,拒绝覆盖已有目录);按已有 oxlint 版本精确安装匹配的 @oxlint/plugins;把 ignorePatterns、jsPlugins 和 18 条通用规则(外加原生 oxc/no-accumulating-spread)合并进 oxlint.config.ts / .oxlintrc. 或 Vite+ 的 lint/fmt 配置;Effect 仓库额外启用 5 条 anti-slop-effect 规则;最后运行 lint 与类型检查、修复授权范围内的空行问题,并在 UPSTREAM.md 记录来源提交等 provenance。更新场景使用三路合并以保留本地定制。
- TypeScript 团队想把防御性 lint 策略 vendor 进仓库、随代码一起演进时
- 对 AI 生成代码(slop)保持警惕、希望用 lint 自动拦截低证据模式的维护者
- 使用 Effect 的项目想统一 tagged error、Match 和 Layer 的使用规范
- 已有 anti-slop 安装、想升级到上游新规则同时保留本地改动的仓库
- 使用 Vite+ 并希望 vp check 同时覆盖 lint 与格式化的团队
这个 Skill 有哪些优点和局限?
- 规则集具体且文档详尽,每条规则附违规示例与豁免边界
- vendor 模式:规则源码归仓库所有,可自由修改以匹配团队标准
- 更新流程用三路合并保留本地定制,不强制覆盖
- 支持 Vite+(vp check)与 oxlint.config.ts / .oxlintrc. 两种配置
- Effect 规则独立成插件,非 Effect 项目不会被动继承架构策略
- 规则基于 ESTree 与词法作用域而非类型检查器,无法推断跨文件或导入类型,部分检查明确标注为局部覆盖
- 作者明言这是个人口味,不是通用编码标准,未必适合所有团队
- 无官方 npm 包,社区 fork 的兼容性由各自维护者负责
- no-array-filter-map 依赖的迭代器辅助方法需要目标运行时支持,TypeScript 声明不会 polyfill
- no-module-mocking 等规则属于强主张(拒绝 vi.mock/jest.mock),可能引发团队争议
如何安装这个 Skill?
运行:npx skills add dmmulroy/anti-slop --skill install-anti-slop(可先用 --list 查看可用技能)。之后让编码 agent 在目标仓库中"安装 anti-slop"即可。也可手动安装:把 src/ 复制到 tools/oxlint/anti-slop/,按 README 的配置示例注册 jsPlugins 与规则。
如何使用这个 Skill?
安装技能后,向 agent 发出如下提示即可:"Install anti-slop in this repository"或"Update anti-slop while preserving local customizations"(可指定上游版本)。技能会复制文件、装依赖、改配置、跑检查并报告结果。规则详情和违规示例见仓库 README。
这个 Skill 与同类方案有什么区别?
与 Oxlint 内置的 oxc/no-accumulating-spread 互补:本项目的 no-reduce-accumulator-copy 专抓非展开式的累积拷贝(如 Object.assign、Array.from、concat/slice),文档要求两者同时启用;require-readable-spacing 的注释感知引擎则 vendored 自 ESLint Stylistic。