name: phx:techdebt description: 分析项目的技术债务、重复代码和重构机会。用于清理或审计代码质量。
技术债务检测
查找并消除 Elixir/Phoenix 项目中的重复代码模式、反模式和重构机会。
铁律 - 绝不可违反
- 重构前搜索 - 在提取前理解重复代码的完整范围
- 三击规则 - 仅在 3+ 次重复后才提取共享代码
- 优先组合 - 使用行为和协议而非继承风格的抽象
- 测试覆盖优先 - 确保在重构重复代码前存在测试
分析检查清单
1. 运行 Credo 进行自动化检测
mix credo --strict
重点关注:
- 设计问题(重复、复杂性)
- 一致性问题(命名、模式)
- 重构机会
2. 查找重复的 Ecto 查询模式
# 重复的 Repo 调用
grep -r "Repo.get!\|Repo.get\|Repo.one" lib/ --include="*.ex"
# 重复的查询模式
grep -r "from.*in.*where" lib/ --include="*.ex"
3. 查找重复的验证逻辑
# Changeset 模式
grep -r "def changeset" lib/ --include="*.ex" | wc -l
# 重复的验证
grep -r "validate_required\|validate_format" lib/ --include="*.ex"
4. 查找复制粘贴的控制器操作
# 相似的操作模式
grep -r "def create\|def update\|def delete" lib/*_web/ --include="*.ex"
常见重复模式
| 模式 | 症状 | 解决方案 |
|---|---|---|
| 重复查询 | 在多个上下文中相同的 Repo.get |
创建共享查询模块 |
| 重复验证 | 相同的 validate_* 调用 |
提取到共享 changeset |
| 相似控制器 | 复制粘贴的 CRUD 操作 | 一致地使用 Phoenix 生成器 |
| 重复转换 | 相同的 Enum.map 模式 |
提取到领域模块 |
报告格式
对于每个发现的重复,报告:
- 位置:文件路径和行号
- 模式:哪些代码被重复
- 提取:建议的共享函数/模块
- 工作量:低/中/高以修复
用法
运行 /phx:techdebt 来分析代码库,并生成一个带有具体修复步骤的优先技术债务报告。