AI代码清理工具Skill ai-code-cleanup

AI代码清理工具是一款专门用于识别和移除AI辅助编程生成的多余代码、防御性膨胀、冗余注释和风格不一致的自动化工具。它帮助开发者优化代码质量,提升可读性,确保代码风格统一,适用于AI编程后处理、代码审查准备和代码重构。关键词:AI代码清理,代码优化,AI编程辅助,代码重构,防御性代码移除,代码风格统一,编程工具,开发效率提升。

DevOps 0 次安装 0 次浏览 更新于 2/28/2026

name: ai-code-cleanup description: 从分支中移除AI生成的代码冗余。在AI辅助编码会话后使用,用于清理防御性膨胀、不必要的注释、类型转换和风格不一致。专注于识别和移除降低代码质量的AI生成痕迹。 author: Joseph OBrien status: unpublished updated: ‘2025-12-23’ version: 1.0.1 tag: skill type: skill

AI代码清理

此技能识别并移除降低代码质量的AI生成痕迹,包括防御性膨胀、不必要的注释、类型转换和风格不一致。

何时使用此技能

  • AI辅助编码会话之后
  • 代码审查或合并分支之前
  • 清理感觉“过度设计”的代码时
  • 移除不必要的防御性代码时
  • AI生成代码后标准化代码风格时
  • 准备生产代码时

此技能的作用

  1. 识别AI痕迹:检测AI生成代码的典型模式
  2. 移除膨胀:消除不必要的防御性代码和注释
  3. 修复类型问题:移除不必要的类型转换和变通方法
  4. 标准化风格:确保与项目约定的一致性
  5. 保留功能:在提高质量的同时保持代码行为
  6. 验证更改:确保代码仍能编译且测试通过

使用方法

清理分支

从此分支移除AI冗余
清理此拉取请求中的代码

特定清理

从src/中移除不必要的注释和防御性代码

要移除的冗余模式

1. 不必要的注释

模式:

  • 解释明显代码的注释
  • 与文件文档风格不一致的注释
  • 重复代码的冗余注释
  • 对简单操作的过度文档化

示例:

// ❌ AI生成:明显的注释
// 设置用户姓名
user.name = name;

// ✅ 清理:自文档化代码
user.name = name;

2. 防御性膨胀

模式:

  • 对该代码库不正常的额外try/catch块
  • 在可信路径上的防御性null/undefined检查
  • 调用方已验证时的冗余输入验证
  • 永远不会触发的错误处理

示例:

// ❌ AI生成:不必要的防御性代码
function processUser(user) {
  try {
    if (user && user.name && typeof user.name === 'string') {
      return user.name.toUpperCase();
    }
    return null;
  } catch (error) {
    console.error(error);
    return null;
  }
}

// ✅ 清理:信任输入,处理真实错误
function processUser(user) {
  return user.name.toUpperCase();
}

3. 类型变通方法

模式:

  • 为绕过类型问题而进行的any类型转换
  • 不必要的类型断言(as X
  • 没有正当理由的@ts-ignore@ts-expect-error
  • 过于复杂的泛型约束

示例:

// ❌ AI生成:类型变通方法
const data = response.data as any;
const result = processData(data as ProcessedData);

// ✅ 清理:正确的类型
const data = response.data;
const result = processData(data);

4. 风格不一致

模式:

  • 与文件其余部分不同的命名约定
  • 与周围代码不匹配的格式
  • 与文件模式不一致的导入组织
  • 与文件风格不一致的变量声明

示例:

// ❌ AI生成:不一致的风格
const UserData = fetchUser();
var processedData = process(UserData);
let FinalResult = format(processedData);

// ✅ 清理:一致的风格
const userData = fetchUser();
const processedData = process(userData);
const finalResult = format(processedData);

5. AI痕迹

模式:

  • 在代码或注释中不必要地使用表情符号
  • 过于冗长的变量名
  • 冗余的中间变量
  • 没有实际用例的“以防万一”代码

清理流程

1. 获取差异

git diff $(git merge-base HEAD main)..HEAD --name-only

2. 分析每个文件

对于每个更改的文件:

  • 阅读完整文件以了解现有风格
  • 识别冗余类别中的模式
  • 进行精确编辑以移除冗余
  • 保留功能

3. 验证

  • 确保代码仍能编译/运行
  • 更改应减少代码,而不是增加
  • 运行测试以验证行为
  • 检查是否有任何回归

示例

示例1:注释清理

输入:从src/auth.js中移除不必要的注释

输出

## AI代码清理:src/auth.js

### 已移除
- 12个解释明显代码的冗余注释
- 3个与文件风格不一致的注释
- 5个过度文档化的简单操作

### 更改
```javascript
// 之前
// 验证用户邮箱的函数
// 以邮箱字符串作为输入
// 返回表示有效性的布尔值
function validateEmail(email) {
  // 检查邮箱是否不为空
  if (!email) {
    return false; // 如果为空则返回false
  }
  // 返回正则表达式测试结果
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

// 之后
function validateEmail(email) {
  if (!email) return false;
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}

结果

  • 行数减少:12 → 4
  • 功能保留
  • 测试通过

### 示例2:防御性膨胀移除

**输入**:从`src/api/users.js`中移除防御性膨胀

**输出**:
```markdown
## AI代码清理:src/api/users.js

### 已移除
- 3个不必要的try/catch块
- 8个已验证输入上的冗余null检查
- 2个永远不会触发的错误处理器

### 更改
```javascript
// 之前
async function getUser(userId) {
  try {
    if (!userId || typeof userId !== 'string') {
      throw new Error('Invalid userId');
    }
    const user = await db.users.findById(userId);
    if (user && user.id) {
      return user;
    }
    return null;
  } catch (error) {
    console.error(error);
    throw error;
  }
}

// 之后
async function getUser(userId) {
  const user = await db.users.findById(userId);
  return user || null;
}

结果

  • 代码减少:15行 → 3行
  • 功能保留
  • 错误处理适合上下文

## 参考文件

- **`references/REFACTORING_PLAN.template.md`** - 重构计划模板,包含代码异味、前后指标和回滚策略

## 最佳实践

### 清理指南

1.  **保留功能**:仅移除不影响行为的代码
2.  **保持风格**:遵循现有项目约定
3.  **保留真实错误**:不要移除合法的错误处理
4.  **更改后测试**:始终验证代码仍能工作
5.  **增量进行**:逐步进行更改,边改边测试

### 应保留的内容

- 合法的错误处理
- 必要的类型断言
- 添加上下文的有用注释
- 针对不可信输入的防御性代码
- 与代码库匹配的风格

### 应移除的内容

- 明显的注释
- 不必要的防御性代码
- 类型变通方法
- 风格不一致
- AI生成的痕迹

## 相关用例

- AI编码后清理
- 代码审查准备
- 代码质量改进
- 风格标准化
- 移除技术债务