소스 정보
- 저장소
- ZeroZ-lab/unified-skills
- 최근 소스 활동
- 2026년 5월 16일 01:54
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 16
- 포크
- 1
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/ZeroZ-lab/unified-skills --skill verify-quality-simplify명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | verify-quality-simplify |
| description | 系统性代码简化。当代码变得复杂、重复、过度抽象需要简化,或提到"简化""重构""太复杂""重复代码" |
verify-workflow-review 或继续 build扫描代码,标记以下类型的简化目标:
50 行的函数
3 层缩进
if (false)、throw 后的代码)对每个目标,回答以下问题:
对每个目标进一步判断:
对不确定的目标:先标记,跳过,不要猜。
规则:每次只改一个目标。每次改动后跑测试,全绿才继续。
| 目标类型 | 策略 | 触发条件 |
|---|---|---|
| 重复代码 | 提取函数 | 仅当第 3+ 次出现 |
| 过度抽象 | 内联回调用处,删除抽象层 | 使用场景 < 3 |
| 过长函数 | 按职责拆分,每个函数一个职责 | > 50 行 |
| 过深嵌套 | 提前返回(guard clause)减少缩进 | > 3 层 |
| 死代码 | 确认无引用后用 AskUserQuestion 确认后删除 | 无引用 |
| 冗余注释 | 删除;删除后不够自解释则改善命名 | 代码已自解释 |
// 第 1 次出现:保持内联
// 第 2 次出现:保持内联,标记 TODO
// 第 3 次出现:提取为函数
function formatDateForDisplay(date: Date): string {
// 三个地方都用的逻辑现在集中在一处
}
// 前:过度抽象(只有 1 个实现)
interface DataProcessor { process(data: Raw): Result }
class DefaultDataProcessor implements DataProcessor { ... }
// 后:直接使用
function processData(data: Raw): Result { ... }
// 前:一个函数做 3 件事
function handleRequest(req: Request): Response { /* 80 行 */ }
// 后:每个函数一个职责
function validateRequest(req: Request): Validated { ... }
function transformData(data: Validated): Processed { ... }
function buildResponse(data: Processed): Response { ... }
// 前:4 层嵌套
function process(user: User) {
if (user) {
if (user.isActive) {
if (user.hasPermission) {
// 真正的逻辑
}
}
}
}
// 后:提前返回,1 层
function process(user: User) {
if (!user) return;
if (!user.isActive) return;
if (!user.hasPermission) return;
// 真正的逻辑
}
# 确认无引用
grep -r "<symbol>" --include="*.ts" --include="*.tsx" --include="*.js"
确认无引用后,使用 AskUserQuestion 询问:"是否删除 <symbol>?代码库中无引用。"
// 前:注释多余
// 设置用户名称
user.setName(name);
// 后 A:删除注释
user.setName(name);
// 后 B:如果删注释后不够清晰,改善命名
user.updateDisplayName(name);
简化完成后,依次验证:
如果任何一项不满足 → 回退最后一次改动,重新评估。
过度抽象(只有 1 个实现的 DataProcessor 接口)→ 内联为 processData() 函数。行数减少、调用链缩短、行为不变(全量测试通过)。下次修改不需要跨 3-5 层间接调用。
3 个相似代码行出现时就建抽象工厂 + 策略模式。使用场景 < 3 但抽象层永久存在,每次修改需追踪多层间接调用,理解负担反而增加。YAGNI 被违反。
简化记录(可合并入审查报告或作为独立记录):
# Simplify 记录: <feature-name>
## 简化目标清单
| 目标 | 类型 | 简化策略 | 原始行数 | 简化后行数 | 状态 |
|------|------|---------|---------|----------|------|
| <symbol-1> | 重复代码 | 提取函数 | X | Y | 完成 |
| <symbol-2> | 过度抽象 | 内联+删除 | X | Y | 完成 |
| <symbol-3> | 死代码 | 确认后删除 | X | 0 | 完成 |
## 验证结果
- 全部测试: PASS (列出命令和结果)
- Lint: 无新警告
- 行为验证: 关键路径手动确认无变化
- 行数变化: 总减少 N 行
## 被跳过的目标
| 目标 | 跳过原因 |
|------|---------|
| <symbol-4> | 不确定依赖关系,需要进一步调查 |
## 结论
- 简化完成 / 需继续(如有被跳过的目标)
输出或记录必须包含:
| 说辞 | 现实 | 后果 |
|---|---|---|
| "这样更优雅" | 优雅不是目标,简单才是。可读、可维护比聪明重要。 | "优雅"代码下次修改时无人敢动——看不懂、怕改坏。3 个月后连作者自己也读不懂。 |
| "先重构再说" | 不理解就动手 = 制造 bug。先 Phase 2 理解上下文。 | 不理解就重构引入 bug 的概率 > 50%(行业经验)。每个引入的 bug 又需要一轮调试,总时间 > 先理解再动手。 |
| "以后会用到" | YAGNI。等第三个使用场景出现再抽象。 | 预先建的抽象 80% 永远不会有第二个使用场景,但每个使用者都要理解它的存在和约束。认知负担永久增加。 |
| "这段代码太难看了" | 丑但正确 > 漂亮但有 bug。先理解为什么丑。 | 为了"美化"而改动的代码引入回归,丑代码背后的隐藏约束没有被理解。修复新 bug 的时间 > 忍受丑代码的代价。 |
| "抽象一下更干净" | 抽象有成本。使用场景 < 3 的抽象增加理解负担。 | 过早抽象让后续修改需要追踪 3-5 层间接调用,下次重构时无人敢删这段代码。 |
违反字面规则就是违反精神。 没有灰色地带。
| 失败场景 | 处理方式 |
|---|---|
| 简化后测试失败 | 立即回退最后一次改动,重新评估简化策略,不可继续改其他目标 |
| 简化后行为变化 | 回退改动,Iron Law 违反 — 行为不变是硬门,行为变化 = 简化失败 |
| 不理解的代码被删除 | 回退删除,按 Chesterton's Fence 原则先理解再决定是否删除 |
| 抽象后代码行数增加 | 回退抽象,重新评估是否真的需要这个抽象(使用场景 < 3 = 不需要) |
| 简化引入新依赖 | 回退改动,简化不应引入新依赖,新依赖 = 增加而非减少复杂度 |