Deslop: 针对 AI 生成的 TypeScript 代码的 Oxlint 规则
概述
Deslop 是 Oxlint 生态系统的一个专用插件,提供了一套主观的规则,旨在识别并拒绝“AI 垃圾代码”(AI-slop)——即那些通常由 LLM 生成、缺乏充分证据、依赖不安全类型断言或表现出糟糕 API 用法的代码模式。通过对 TypeScript 代码强制执行更严格的约束,Deslop 帮助开发者在集成 AI 辅助功能开发时维护代码库的完整性。
核心功能与规则
Deslop 将其规则分为三个主要领域:类型安全、代码质量和测试标准。该插件基于 anti-slop 项目最初开发的规则构建,并扩展了 deslop/* 命名空间下的额外自定义规则。
类型安全与证据
这些规则旨在防止 AI 常见的倾向,即通过不安全的断言绕过 TypeScript 类型系统。主要规则包括:
no-chained-type-assertions:拒绝嵌套的as或尖括号断言,这些断言会伪造类型证据。no-unknown-parameters和no-unknown-returns:禁止在函数签名和返回契约中使用unknown,强制要求显式的类型定义。require-safety-comment-for-type-assertion:强制要求为非 const 断言提供不变性理由,确保开发者记录为何需要该断言。
代码质量与 API 使用
为了防止生成过于复杂或非惯用的代码,Deslop 针对 LLM 频繁使用的特定 API 模式进行了限制:
no-reflect-apply和no-reflect-get:限制使用全局Reflect方法,这些方法经常被 Claude 等模型过度使用。no-array-filter-map:防止低效的相邻急切数组操作,鼓励使用性能更高的迭代器管道。
测试标准
Deslop 包含了一些旨在提高测试套件可靠性的规则,这在依赖 AI 生成代码时至关重要。这些规则包括:
no-module-mocking:拒绝使用 Vitest 和 Jest 模块模拟,以鼓励更好的依赖注入。no-poor-substring-tests:标记那些依赖弱子字符串匹配进行验证的测试。
开发者反馈与用例
Deslop 及类似工具的早期采用者强调,激进的 Linting 是扩展 AI 辅助开发的前提。开发者指出,如果没有这样的护栏,维护一个高 AI 参与度的代码库将变得难以管理。
"我参与的项目最近大量转向 AI 辅助功能开发,如果没有极其防御性/激进的 lint 配置和接近 80% 的测试覆盖率,这些开发工作几乎是不可能完成的。" — @SSchick
用户还强调了将 Oxlint 与其他基于 AST 的工具结合使用的重要性,以确保跨不同语言和 LLM 输出的代码质量。像 ast-grep-essentials 这样的项目经常被引用为团队构建 AI 生成代码自定义验证管道的补充工具。
安装与使用
Deslop 以 npm 包的形式分发,并与任何 Oxlint JavaScript 插件运行时兼容,包括 Bun、Deno 和 Node.js。要集成它,用户需将插件添加到其 oxlint 配置文件中:
import { defineConfig } from "oxlint";
import { configs as deslopConfigs } from "ai-deslop";
export default defineConfig({
jsPlugins: ["ai-deslop"],
options: deslopConfigs.recommended.options,
rules: deslopConfigs.recommended.rules
});
对于需要更细粒度控制的团队,该插件还提供了一组可选规则,例如 no-duplicate-types 和针对 Tailwind CSS v4 的 canonical-class-names,可以根据特定的项目需求启用。