←新聞 4 / 9→

開發工具

Show HN:Deslop – 針對 AI 生成 TypeScript 的 Oxlint 規則

Show HN: Deslop – Oxlint rules for AI-generated TypeScript

Show HN:Deslop – 針對 AI 生成 TypeScript 的 Oxlint 規則

github.com · 2026-10-14

摘要

Deslop 是一套專為 AI 生成程式碼設計的 Oxlint 規則,旨在自動偵測 TypeScript 程式碼中的不安全型別、重複程式碼以及低價值的測試。對於依賴 AI 輔助開發的團隊而言,這提供了一種新的靜態分析手段,用於提升 AI 產出程式碼的品質與安全性。

針對 AI 生成程式碼中的低品質寫法,開發者推出一套名為 `ai-deslop` 的 Oxlint 規則套件。這套規則帶有明確主張,會拒絕低證據、低訊號、被稱為「AI 垃圾」(AI-slop)的程式碼寫法。

規則來源與授權

`ai-deslop` 的規則不是完全獨立開發,而是整合自多個來源:一部分來自 `dmmulroy/anti-slop` 專案的通用規則,另外再加上額外的 `deslop` 規則。所有規則都已重新命名,歸在 `deslop/*` 命名空間下。被整合的原始碼採用 MIT 授權條款釋出。

安裝與環境相容性

開發者可以用 `npm install --save-dev ai-deslop` 把套件裝成開發環境依賴項。安裝 `ai-deslop` 時,會自動帶入 `@oxlint/plugins` 作為執行階段依賴(runtime dependency)。使用者需要讓 `@oxlint/plugins` 的版本與專案使用的 oxlint 版本保持同步。

執行環境方面,這個套件提供的是已編譯的 JavaScript 檔案,因此任何支援 JS 插件的 oxlint 執行環境都能使用,包括 Bun、Deno 或 Node.js。

配置方法

要在專案中啟用這些規則,需要修改 oxlint 的設定檔。配置範例顯示,開發者要從 `oxlint` 匯入 `defineConfig`,並從 `ai-deslop` 匯入 `configs`(別名為 `deslopConfigs`)。在預設匯出的配置中,`jsPlugins` 陣列要包含 `["ai-deslop"]`,`options` 與 `rules` 則分別對應 `deslopConfigs.recommended.options` 與 `deslopConfigs.recommended.rules`。

核心檢查規則

套件提供多條針對特定程式碼寫法的檢查規則。

### 類型斷言與未知類型處理

類型斷言方面,`no-chained-type-assertions` 會拒絕巢狀的 `as` 或角括號斷言,因為這類斷言會捏造證據。`no-widen-then-assert` 則拒絕在做縮窄斷言之前,先把已知證據擴大範圍。對於非常數(non-const)的斷言,`require-safety-comment-for-type-assertion` 要求提供不變量 justification(理由)。

未知類型方面,`no-known-value-widening` 拒絕讓已知表達式流入明確的 `unknown`、`object` 或開放字典類型。`no-unknown-parameters` 拒絕函數輸入使用 `unknown`,`no-unknown-returns` 則拒絕解析為 `unknown` 的返回契約。`no-unknown-type-aliases` 拒絕解析後類型為 `unknown` 的類型別名。此外,`no-unsafe-dictionary-type` 拒絕建立在不安全逃逸通道(escape hatches)上的字典值。

### 函數參數與邊界檢查

`no-object-parameters` 拒絕在函數輸入中使用 `object`。`no-runtime-typeof` 則要求使用邊界解析(boundary parsing),而不是臨時拼湊的 `typeof` 縮窄寫法。

### 測試與斷言邏輯

測試程式碼方面,套件有多條規則。`no-call-only-assertions` 會標記只檢查 mock 呼叫的測試。`no-module-mocking` 直接拒絕使用 Vitest 和 Jest 的模組 mock 功能。`no-poor-substring-tests` 拒絕測試常量字串是否包含子字串的寫法。`no-repeated-expect-call` 會標記測試檔案中相鄰、重複相同呼叫的斷言,建議重複使用結果;這條規則不提供自動修復。

### 陣列操作與反射

陣列處理方面,`no-array-filter-map` 拒絕相鄰的急切(eager)陣列 filter/map 遍歷,但允許惰性迭代器管線。`no-reduce-accumulator-copy` 拒絕在 reducer 中以非展開(non-spread)方式複製累加器,並建議同時啟用原生的 `oxc/no-accumulating-spread` 規則。此外,套件也拒絕使用全域的 `Reflect.apply` 與 `Reflect.get`。

### 其他語法與命名慣例

套件還有幾條關於命名與語法的規則。`no-shape-in-symbol-names` 拒絕在本地擁有的符號名稱中使用 `shape`。`no-pass-through-type-alias` 禁止只用來重新命名其他類型的別名。`no-duplicate-consts` 會報告在不同檔案中使用相同靜態值的全大寫常數。`no-duplicate-types` 會報告完全重複的物件契約,且不提供自動修復。`no-renamed-imports` 會在原始名稱沒有模組層級衝突時,修復不必要的具名匯入別名。`canonical-class-names` 則修復非標準的 Tailwind CSS v4 類別拼寫。

內建 TypeScript 規則

除了自訂規則,套件也列出部分 TypeScript 相關的規則。`typescript/no-deprecated` 禁止使用標記為 `@deprecated` 的程式碼,這條規則需要類型感知 linting(type-aware linting)。`typescript/no-require-imports` 禁止用 CommonJS 的 `require()` 匯入。`typescript/no-floating-promises` 禁止懸空 promises,同樣需要類型感知 linting。`typescript/no-unnecessary-condition` 禁止始終為真、假或 nullish 的條件判斷,也需要類型感知 linting。另外,`no-unreachable` 禁止無法到達的程式碼。

詳細配置參考

`no-duplicate-consts` 的配置與精確靜態值比較的行為,文件中有說明。`no-duplicate-types` 的精確比較行為、worker 作用域、完整的 TypeScript/JSON 範例,以及所有支援的選項,文件中也有說明。`no-renamed-imports` 則說明了何時會修復具名匯入別名,以及如何處理衝突。

●開發者:可引入此工具自動檢查 AI 生成的 TypeScript 程式碼,減少潛在的型別錯誤與重複程式碼

重要性評分

68/100

🟠 值得關注

TypeScriptOxlintAI 生成程式碼靜態分析程式碼品質
原文出處
上一則← All Systems Go: 全球 PC 應用程式生態系已為 NVIDIA RTX Spark 就緒下一則AutoIndexer:透過訓練因果模型於編輯鏈條,實現靈活順序解碼 →

喜歡這篇?每天早晨還有更多。

訂閱 5min AI,讓 AI 替你追蹤整個 AI 世界。

相關指南

🤖 本文摘要由 AI 自動生成,內容源自原始報導。如有疑慮,請參閱關於我們。

喜歡這篇?每天早晨還有更多。

訂閱 5min AI,讓 AI 替你追蹤整個 AI 世界。