mcpField
A
anti-slop

anti-slop

github.com/b4r7x测试与质量079 次安装12 周前更新
代码仓库

关于 anti-slop

Anti-Slop 是用于识别 AI 生成代码常见模式的代码审计技能。它依据模式目录检查支持的源文件,并生成包含位置、严重程度和修复建议的结构化报告。

主要功能

  1. 01审计支持的源文件
  2. 02检查七类代码模式
  3. 03报告行号与严重程度
  4. 04提供简洁修复建议
  5. 05标记长文件的部分审计

适用场景

  1. 01检查代码中的不必要复杂性
  2. 02定位死代码和类型绕过
  3. 03检查多文件间重复的工具函数

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/b4r7x/agent-skills --skill anti-slop

安装后在 Claude Code 中输入/anti-slop确认已加载。

附带文件references/slop-code-patterns.md

详细介绍

Anti-Slop

审计源代码中的 AI 生成的冗余模式,并输出结构化报告。

工作流

步骤 1 — 解析文件

将参数解析为文件路径或 glob 模式。将 glob 展开为具体的文件列表。

# If argument is a glob like "src/**/*.ts", expand it
# If argument is a file path, use it directly
# If multiple paths/globs, expand all

支持的扩展名: .ts、.tsx、.js、.jsx、.py、.go、.rs、.java、.rb、.php、.swift、.kt

超过 1000 行的文件:仅审计前 500 行,并将文件的报告条目标记为 partial — first 500 of N lines;绝不能将部分审计报告为完整审计。

如果未提供参数,请提示用户:

“要审计哪些文件?请传入文件路径或 glob 模式(例如 src/**/*.ts)。”

步骤 2 — 阅读模式目录

阅读 references/slop-code-patterns.md,了解完整的检测规则和严重性指南。

步骤 3 — 审计每个文件

对每个文件:

  1. 阅读文件内容

  2. 扫描全部 7 个类别中的模式:

    • 类别 1:不必要的注释 — 重述代码、显而易见的 JSDoc、含糊的 TODO、分节分隔符、“已移除”标记
    • 类别 2:过度工程化 — 过早抽象、不必要的工厂、为硬编码值添加配置、转发包装器、仅用一次的接口
    • 类别 3:防御性过度编码 — 对非空类型进行空值检查、对必定成功的操作使用 try-catch、return 后冗余的 else、冗长的错误消息、掩盖 bug 的回退逻辑
    • 类别 4:AI 口吻 — “enhanced/optimized/improved” 命名、“ensure/robust/graceful” 注释、对控制流的旁白说明、道歉式注释
    • 类别 5:死代码 — 未使用的导入、赋值后未读取的变量、不可达代码、向后兼容的重新导出
    • 类别 6:类型变通 — as any、未说明原因的 @ts-ignore、不必要的断言
    • 类别 7:冗长模式 — 可用 ?? 替代的三元表达式、冗长的布尔表达式、不必要的 async/await、无意义的展开运算符
  3. 对发现的每个问题,记录:

    • 行号
    • 类别(1-7)
    • 模式(例如,“1a:重述代码”)
    • 严重性(高 / 中 / 低)
    • 问题代码(1-3 行)
    • 建议修复方式(简述要怎么做,不要给出完整改写)
步骤 4 — 跨文件检查

完成单个文件的审计后,检查跨文件模式:

  • 仅在一个文件中调用的函数 — 可能是过早抽象(类别 2a)
  • 未在其他文件中导入的导出符号 — 可能是死代码(类别 5d)
  • 跨文件重复的实用函数 — AI 经常会在多个位置创建相同的辅助函数

仅在审计 3 个或更多文件时运行这些检查。使用 grep 搜索代码库中的函数和导出符号使用情况。

步骤 5 — 输出报告

按以下格式整理报告:

## Anti-Slop Audit Report

**Files audited:** N
**Issues found:** N (H high, M medium, L low)

---

### `path/to/file.ts`

| Line | Severity | Category | Pattern | Issue |
|------|----------|----------|---------|-------|
| 12 | medium | Unnecessary comment | 1a: restating code | `// set the name` above `this.name = name` |
| 45-52 | medium | Over-engineering | 2a: premature abstraction | `formatDate()` called once, body is one line |
| 89 | high | Type workaround | 6a: `as any` | `response.data as any` — fix the response type |

**Suggested fixes:**
- L12: Delete the comment
- L45-52: Inline `formatDate()` at L78
- L89: Type `response.data` as `ApiResponse` based on the fetch call at L85

---

### `path/to/other-file.ts`
...

---

### Cross-File Issues

- `formatSlug()` defined in `utils.ts:34` is only imported by `page.ts:2` — consider inlining
- `UserDTO` exported from `types.ts:12` is not imported anywhere

---

### Summary by Category

| Category | Count |
|----------|-------|
| 1. Unnecessary comments | N |
| 2. Over-engineering | N |
| 3. Defensive over-coding | N |
| 4. AI voice | N |
| 5. Dead code | N |
| 6. Type workarounds | N |
| 7. Verbose patterns | N |

如果未发现问题,输出:

## Anti-Slop Audit Report

**Files audited:** N
**Issues found:** 0

Clean. No slop detected.

评论

支持 Markdown