1. 背景:AI 代码生成的两面性

Claude Code 和 Codex 这类 AI 编程助手极大提升了开发效率,但长期使用后你会发现一个共性痛点:代码越写越脏

具体表现为:

  • 大量冗余注释(// 这里遍历列表 这种废话)
  • 重复的 import / 未使用的变量
  • 不一致的缩进和空行
  • 为了「安全」而生成的防御性 null 检查,实际永远不会触发
  • 风格漂移:同一个文件里混用多种写法

这些「脏代码」不是 Bug,但会显著降低可维护性,让 Code Review 变成「人工去噪」。

2. 为什么 Claude Code / Codex 会越写越脏?

根本原因在于 LLM 的上下文污染过度生成倾向:

  1. 上下文累积:每次对话都会把历史代码片段塞进上下文,模型倾向于「模仿」之前输出的风格,包括那些不完美的部分。
  2. 安全优先:模型宁可多写一行注释、多做一个 null 检查,也不愿遗漏——这在生产环境是好事,但在日常开发中就是噪音。
  3. 缺乏全局视角:每次只生成一个函数或一个文件,没有「整个项目代码规范」的约束。

3. Fallow 是什么?

Fallow 是一个轻量级的代码后处理层,专门用于清理 AI 生成代码中的「脏」部分。它不修改业务逻辑,只做格式化、去噪和风格统一。

核心设计理念:

  • 无侵入:作为 Git pre-commit hook 或 CI 步骤运行,不改变开发流程
  • 可配置:哪些规则启用、哪些文件跳过,完全由你控制
  • 幂等:多次运行结果一致,不会反复修改

4. 快速上手

安装

# 通过 pip 安装
pip install fallow

# 或通过 npm(如果项目是 Node.js 生态)
npm install -g fallow

基本配置

在项目根目录创建 fallow.config.yaml

# fallow.config.yaml
rules:
  # 移除无意义的单行注释(如 // 获取用户列表)
  remove_redundant_comments: true
  
  # 移除未使用的 import
  remove_unused_imports: true
  
  # 统一缩进为 2 空格
  indent_style: space
  indent_size: 2
  
  # 移除多余空行(连续超过 2 个空行压缩为 1 个)
  compress_blank_lines: true
  
  # 修复不一致的引号风格(统一为单引号)
  quote_style: single

# 排除目录
exclude:
  - node_modules
  - vendor
  - generated

运行

# 清理当前目录下所有 AI 生成的代码
fallow clean --path ./src

# 只检查不修改(dry-run 模式)
fallow check --path ./src

5. 实战效果对比

清理前(Claude Code 输出)

# 获取用户列表
def get_users():
    # 从数据库查询所有用户
    users = db.query("SELECT * FROM users")  # 执行 SQL 查询
    # 返回用户列表
    return users

清理后(Fallow 处理)

def get_users():
    users = db.query("SELECT * FROM users")
    return users

更复杂的例子——清理前

// 计算订单总价
function calculateTotal(order) {
  let total = 0; // 初始化总价
  // 遍历订单项
  for (let i = 0; i < order.items.length; i++) {
    const item = order.items[i]; // 获取当前项
    // 累加价格
    total = total + item.price; // 加上当前项价格
  }
  // 返回总价
  return total;
}

清理后

function calculateTotal(order) {
  let total = 0;
  for (const item of order.items) {
    total += item.price;
  }
  return total;
}

注意 Fallow 不仅去掉了注释,还把 for 循环改成了更现代的 for...of 写法——这是通过可选的代码现代化规则实现的。

6. 集成到工作流

方式一:Git pre-commit hook

# 安装 pre-commit hook
fallow install-hook

# 之后每次 git commit 都会自动清理暂存区的代码

方式二:CI 流水线

# .github/workflows/code-cleanup.yml
name: Code Cleanup
on: [pull_request]
jobs:
  cleanup:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install fallow
      - run: fallow check --path ./src

方式三:与 Claude Code / Codex 配合

在提示词(prompt)末尾追加:

生成完成后,请运行 `fallow clean --path .` 清理输出。

或者更彻底的做法:让 AI 只生成逻辑,Fallow 负责格式。这样你得到的是「干净的业务代码 + 统一的风格」,而不是「AI 风格的脏代码」。

7. 注意事项

  • 不要过度清理:有些注释是必要的(如复杂算法的解释、TODO 标记),Fallow 默认只清理「明显冗余」的注释,你可以通过规则配置调整敏感度。
  • 测试先行:Fallow 不修改逻辑,但建议在集成到 CI 前先在 dry-run 模式下跑一遍,确认规则符合团队预期。
  • 语言支持:目前 Fallow 对 Python、JavaScript/TypeScript、Java、Go 支持最好,其他语言的部分规则可能不生效。

8. 总结

Claude Code 和 Codex 让写代码变快了,但也让代码变「脏」了。Fallow 作为一层轻量清理层,解决了这个副作用:

  • ✅ 自动去噪:移除冗余注释、未用 import、多余空行
  • ✅ 风格统一:缩进、引号、空行规则一致
  • ✅ 无侵入:作为 hook 或 CI 步骤运行,不改变开发习惯
  • ✅ 可配置:按项目需求开关规则

如果你也在被 AI 生成的「脏代码」困扰,不妨试试 Fallow——让 AI 负责「写」,让 Fallow 负责「擦」。

更多推荐