Hacker News· maharshi365·· 3 小时前精选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 代码库中的接入成本与效果。
正文
Opinionated Oxlint rules that reject low-evidence, low-signal, AI-slop code patterns.
Rules are vendored from dmmulroy/anti-slop (generic rules) alongside additional deslop rules, all renamed under the deslop/* namespace. The vendored source is MIT licensed; see Credits below.
Install
npm install --save-dev ai-deslop
# @oxlint/plugins comes along as a runtime dependency — keep it in sync with your oxlint versionShips compiled JavaScript — works with any oxlint JS-plugin runtime (Bun, Deno, or Node.js).
Usage
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 });
Rules
Type safety and evidence
| Rule | Status | Description |
|---|---|---|
no-chained-type-assertions |
Recommended | Rejects nested as / angle-bracket assertions that fabricate evidence. |
no-conditional-empty-object-spread |
Recommended | Reports object spreads using a conditional {} branch to omit fields. |
no-known-value-widening |
Recommended | Rejects known expressions flowing into explicit unknown, object, or open dictionaries. |
no-object-parameters |
Recommended | Rejects object on function inputs. |
no-runtime-typeof |
Recommended | Requires boundary parsing instead of ad hoc typeof narrowing. |
no-unknown-parameters |
Recommended | Rejects unknown on function inputs. |
no-unknown-returns |
Recommended | Rejects return contracts resolving to unknown. |
no-unknown-type-aliases |
Recommended | Rejects aliases whose resolved type is unknown. |
no-unsafe-dictionary-type |
Recommended | Rejects dictionary values based on unsafe escape hatches. |
no-widen-then-assert |
Recommended | Rejects widening known evidence before narrowing assertions. |
require-safety-comment-for-type-assertion |
Recommended | Requires an invariant justification for non-const assertions. |
no-pass-through-type-alias |
Recommended | Disallows aliases that only rename another type. |
Code quality and APIs
| Rule | Status | Description |
|---|---|---|
no-array-filter-map |
Recommended | Rejects adjacent eager array filter/map passes; allows lazy iterator pipelines. |
no-reduce-accumulator-copy |
Recommended | Rejects non-spread accumulator copies inside reducers. Enable native oxc/no-accumulating-spread alongside it. |
no-reflect-apply |
Recommended | Rejects global Reflect.apply. |
no-reflect-get |
Recommended | Rejects global Reflect.get. |
no-shape-in-symbol-names |
Recommended | Rejects shape in locally owned symbol names. |
Tests
| Rule | Status | Description |
|---|---|---|
no-call-only-assertions |
Recommended | Flags tests whose assertions only check mock calls. |
no-module-mocking |
Recommended | Rejects Vitest and Jest module mocks. |
no-poor-substring-tests |
Recommended | Rejects testing that a constant string contains substrings. |
no-repeated-expect-call |
Recommended | Flags adjacent assertions that repeat the same call in test files. Reuse the result instead. No fixer. |
Opt-in rules
| Rule | Status | Description |
|---|---|---|
no-duplicate-consts |
Opt-in | Reports all-caps constants with the same static value in different files. |
no-duplicate-types |
Opt-in | Reports exact duplicate object contracts. No fixer. |
no-renamed-imports |
Opt-in | Fixes unnecessary named-import aliases when the original name has no module-level conflict. |
canonical-class-names |
Opt-in | Fixes non-canonical Tailwind CSS v4 class spellings. |
Standard rules enabled by the recommended config
| Standard rule | Status | Description |
|---|---|---|
typescript/no-deprecated |
Recommended | Disallows using code marked @deprecated. Requires type-aware linting. |
typescript/no-require-imports |
Recommended | Disallows CommonJS require() imports. |
typescript/no-floating-promises |
Recommended | Disallows floating promises. Requires type-aware linting. |
typescript/no-unnecessary-condition |
Recommended | Disallows always truthy/falsy/nullish conditions. Requires type-aware linting. |
no-unreachable |
Recommended | Disallows unreachable code. |
Guides
| Guide | Contents |
|---|---|
| No duplicate consts | Configuration and exact static-value comparison behavior. |
| No duplicate types | Exact comparison behavior, worker scope, complete TypeScript/JSON examples, and every supported option. |
| No renamed imports | When named-import aliases are fixed and how conflicts are handled. |
| Tailwind canonical class names | Tailwind v4 setup, complete TypeScript/JSON examples, and every supported option. |
Credits
- Generic rules vendored verbatim from dmmulroy/anti-slop (MIT, © Dillon Mulroy), including
src/shared/*.
License
MIT
来源:Hacker News · github.com