Show HN:Deslop — 面向 AI 生成 TypeScript 代码的 Oxlint 规则集
摘要
Deslop 是一套面向 Oxlint 的开源插件规则集,用于拦截 AI 生成的 TypeScript 代码中常见的类型断言滥用、低信号测试等'slop'模式。
查看缓存全文
缓存时间: 2026/10/13 18:58
maharshi365/deslop
来源:https://github.com/maharshi365/deslop
ai-deslop
一套有主见的 Oxlint 规则,用于拒绝低证据、低信噪比的 AI 垃圾代码模式。
规则部分来源于 dmmulroy/anti-slop(https://github.com/dmmulroy/anti-slop)中的通用规则(vendor 模式),并附加了额外的 deslop 规则,全部重命名为 deslop/* 命名空间。vendor 来源采用 MIT 许可证,详见下方致谢。
安装
``bash npm install –save-dev ai-deslop
@oxlint/plugins 作为运行时依赖一同安装 —— 请保持其与 oxlint 版本一致
``
发布编译后的 JavaScript —— 可在任何支持 oxlint JS 插件的运行时中使用(Bun、Deno 或 Node.js)。
用法
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-chained-type-assertions | 推荐 | 拒绝嵌套的 as / 尖括号类型断言,这类断言会伪造证据。 |
no-conditional-empty-object-spread | 推荐 | 报告使用条件 {} 分支进行对象展开来省略字段的写法。 |
no-known-value-widening | 推荐 | 拒绝已知表达式流入显式 unknown、object 或开放式字典类型。 |
no-object-parameters | 推荐 | 拒绝函数参数使用 object 类型。 |
no-runtime-typeof | 推荐 | 要求在边界处进行解析,而非临时使用 typeof 进行类型收窄。 |
no-unknown-parameters | 推荐 | 拒绝函数参数使用 unknown 类型。 |
no-unknown-returns | 推荐 | 拒绝返回值类型解析为 unknown 的函数。 |
no-unknown-type-aliases | 推荐 | 拒绝解析后类型为 unknown 的类型别名。 |
no-unsafe-dictionary-type | 推荐 | 拒绝基于不安全逃生通道的字典值类型。 |
no-widen-then-assert | 推荐 | 拒绝先拓宽已知证据再进行收窄断言的写法。 |
require-safety-comment-for-type-assertion | 推荐 | 要求非 const 断言必须附带不变式安全说明注释。 |
no-pass-through-type-alias | 推荐 | 禁止仅对另一个类型重命名的透传类型别名。 |
代码质量与 API
| 规则 | 状态 | 描述 |
|---|---|---|
no-array-filter-map | 推荐 | 拒绝相邻的即时数组 filter/map 链式调用;允许使用惰性迭代器管道。 |
no-reduce-accumulator-copy | 推荐 | 拒绝 reducer 中使用非展开运算的累加器拷贝。建议同时启用原生 oxc/no-accumulating-spread 规则。 |
no-reflect-apply | 推荐 | 拒绝使用全局 Reflect.apply。 |
no-reflect-get | 推荐 | 拒绝使用全局 Reflect.get。 |
no-shape-in-symbol-names | 推荐 | 拒绝在本地拥有的符号名称中使用 shape 一词。 |
测试
| 规则 | 状态 | 描述 |
|---|---|---|
no-call-only-assertions | 推荐 | 标记仅检查 mock 调用的测试断言。 |
no-module-mocking | 推荐 | 拒绝使用 Vitest 和 Jest 的模块 mock。 |
no-poor-substring-tests | 推荐 | 拒绝对常量字符串进行子串包含测试。 |
no-repeated-expect-call | 推荐 | 标记测试文件中相邻断言重复调用相同函数的写法。请复用调用结果。无自动修复。 |
可选规则
| 规则 | 状态 | 描述 |
|---|---|---|
no-duplicate-consts | 可选 | 报告不同文件中具有相同静态值的全大写常量。 |
no-duplicate-types | 可选 | 报告完全重复的对象类型契约。无自动修复。 |
no-renamed-imports | 可选 | 修复不必要的命名导入别名,前提是原始名称在模块级别没有冲突。 |
canonical-class-names | 可选 | 修复非规范的 Tailwind CSS v4 类名拼写。 |
推荐配置中启用的标准规则
| 标准规则 | 状态 | 描述 |
|---|---|---|
typescript/no-deprecated | 推荐 | 禁止使用标记为 @deprecated 的代码。需要启用类型感知 lint。 |
typescript/no-require-imports | 推荐 | 禁止使用 CommonJS 的 require() 导入。 |
typescript/no-floating-promises | 推荐 | 禁止浮空 Promise。需要启用类型感知 lint。 |
typescript/no-unnecessary-condition | 推荐 | 禁止永远为真/为假/为空的条件判断。需要启用类型感知 lint。 |
no-unreachable | 推荐 | 禁止不可达代码。 |
指南
| 指南 | 内容 |
|---|---|
| No duplicate consts | 配置方式及精确静态值比较行为。 |
| No duplicate types | 精确比较行为、worker 作用域、完整的 TypeScript/JSON 示例及所有支持的选项。 |
| No renamed imports | 命名导入别名何时会被自动修复,以及冲突如何处理。 |
| Tailwind canonical class names | Tailwind v4 配置、完整的 TypeScript/JSON 示例及所有支持的选项。 |
致谢
- 通用规则逐字移植自 dmmulroy/anti-slop(https://github.com/dmmulroy/anti-slop)(MIT,© Dillon Mulroy),包括
src/shared/*。
许可证
MIT
相似文章
@trendtech33566: 让 AI 生成的界面不再千篇一律?anti-slop 项目,约 5k stars,一套为 AI 编程代理打造的"去流水线化"规则集……
开源项目 anti-slop 提供一套面向 AI 编程代理的规则集(约 5k stars),用于抑制 AI 生成界面中千篇一律的模式、空洞的营销文案和编造的数据,同时不限制配色与字体,让开发者保留自己的设计方向。
@mattpocockuk: 这真的很聪明。确实有一套规则太复杂,无法确定性地进行 lint,感觉浪费……
这条推文讨论了使用 Jev 作为模糊 linter 来处理不适合确定性 lint 的复杂编码指南,例如 useEffect 和注释管理。
hardikpandya/stop-slop
一种用于从散文中去除常见AI写作模式的技能/工具,包括禁用短语、结构陈词滥调和句子层面的问题,旨在用于Claude或任何LLM。
@nateberkopec: 自动 lint 规则,对人类来说过于严格,但对代理有效:1. 圈复杂度预算 2. 每文件代码行数限制…
这条推文讨论了像圈复杂度预算和 CSS/JS 限制这样的自动 lint 规则,这些规则对人类来说严格,但对编码代理有效。Sam Saffron 强调了它们在防止长期代码腐烂方面的作用。
@IfanJew: https://github.com/hyhmrright/brooks-lint… 非常非常棒!尽量避免了 AI 造屎山的问题, 不明白为何 star 数那么少 比其他那些吹的神乎其神的 skills 好太多了
brooks-lint 是一个基于十二本经典软件工程书籍的 AI 代码审查工具,提供结构化的、可追溯的代码衰退风险评估与修复建议,旨在避免 AI 生成的代码质量问题。