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生成代码后标准化代码风格时
- 准备生产代码时
此技能的作用
- 识别AI痕迹:检测AI生成代码的典型模式
- 移除膨胀:消除不必要的防御性代码和注释
- 修复类型问题:移除不必要的类型转换和变通方法
- 标准化风格:确保与项目约定的一致性
- 保留功能:在提高质量的同时保持代码行为
- 验证更改:确保代码仍能编译且测试通过
使用方法
清理分支
从此分支移除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编码后清理
- 代码审查准备
- 代码质量改进
- 风格标准化
- 移除技术债务