Hacker News· maharshi365·· 20 天前精选AI 评分55
Deslop 开源:拒绝 AI 生成低质 TypeScript 代码的 Oxlint 规则集
Show HN: Deslop – Oxlint rules for AI-generated TypeScript
AI 导读
开发者 maharshi365 开源 Deslop,一套用于识别 AI 生成低信号 TypeScript 代码模式的 Oxlint 规则集,可通过 npm install --save-dev ai-deslop 安装,附带 @oxlint/plugins 运行时依赖。
推荐理由
给出了一套可直接安装的规则集及其覆盖维度,读者可以据此评估在自家 TypeScript 代码库中的接入成本与效果。
正文 · AI 翻译
有主见的 Oxlint 规则,用于拒绝低证据、低信号、AI 凑数式的代码模式。
规则从 dmmulroy/anti-slop(通用规则)引入,并加入额外的 deslop 规则,全部以 deslop/* 命名空间重命名。引入源码采用 MIT 许可;详见下方致谢部分。
安装
npm install --save-dev ai-deslop
# @oxlint/plugins comes along as a runtime dependency — keep it in sync with your oxlint version附带编译后的 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 |
推荐 | 要求为非常量断言提供不变式依据。 |
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(MIT,© Dillon Mulroy),包括
src/shared/*。
许可证
MIT
来源:Hacker News · github.com