ccjk 1.5.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/README.ja.md +249 -297
  2. package/README.ko.md +241 -290
  3. package/README.md +222 -364
  4. package/README.zh-CN.md +553 -295
  5. package/dist/chunks/claude-code-config-manager.mjs +7 -7
  6. package/dist/chunks/claude-code-incremental-manager.mjs +1 -1
  7. package/dist/chunks/codex-config-switch.mjs +3 -3
  8. package/dist/chunks/codex-provider-manager.mjs +1 -1
  9. package/dist/chunks/codex-uninstaller.mjs +2 -2
  10. package/dist/chunks/commands.mjs +1 -1
  11. package/dist/chunks/features.mjs +10 -10
  12. package/dist/chunks/simple-config.mjs +321 -389
  13. package/dist/chunks/smart-guide.mjs +234 -0
  14. package/dist/cli.mjs +1795 -433
  15. package/dist/i18n/locales/en/configuration.json +12 -1
  16. package/dist/i18n/locales/en/marketplace.json +84 -0
  17. package/dist/i18n/locales/en/menu.json +38 -1
  18. package/dist/i18n/locales/en/skills.json +140 -0
  19. package/dist/i18n/locales/en/smartGuide.json +49 -0
  20. package/dist/i18n/locales/en/subagent.json +69 -0
  21. package/dist/i18n/locales/en/superpowers.json +58 -0
  22. package/dist/i18n/locales/zh-CN/configuration.json +12 -1
  23. package/dist/i18n/locales/zh-CN/marketplace.json +84 -0
  24. package/dist/i18n/locales/zh-CN/menu.json +38 -1
  25. package/dist/i18n/locales/zh-CN/skills.json +140 -0
  26. package/dist/i18n/locales/zh-CN/smartGuide.json +49 -0
  27. package/dist/i18n/locales/zh-CN/subagent.json +69 -0
  28. package/dist/i18n/locales/zh-CN/superpowers.json +58 -0
  29. package/dist/index.d.mts +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.mjs +366 -7
  32. package/package.json +26 -27
  33. package/templates/common/skills/en/brainstorming.md +64 -0
  34. package/templates/common/skills/en/code-review.md +81 -0
  35. package/templates/common/skills/en/documentation-gen.md +808 -0
  36. package/templates/common/skills/en/executing-plans.md +75 -0
  37. package/templates/common/skills/en/git-commit.md +216 -0
  38. package/templates/common/skills/en/interview.md +223 -0
  39. package/templates/common/skills/en/migration-assistant.md +312 -0
  40. package/templates/common/skills/en/performance-profiling.md +576 -0
  41. package/templates/common/skills/en/pr-review.md +341 -0
  42. package/templates/common/skills/en/refactoring.md +384 -0
  43. package/templates/common/skills/en/security-audit.md +462 -0
  44. package/templates/common/skills/en/systematic-debugging.md +82 -0
  45. package/templates/common/skills/en/tdd-workflow.md +93 -0
  46. package/templates/common/skills/en/verification.md +81 -0
  47. package/templates/common/skills/en/workflow.md +370 -0
  48. package/templates/common/skills/en/writing-plans.md +78 -0
  49. package/templates/common/skills/zh-CN/documentation-gen.md +807 -0
  50. package/templates/common/skills/zh-CN/migration-assistant.md +318 -0
  51. package/templates/common/skills/zh-CN/performance-profiling.md +746 -0
  52. package/templates/common/skills/zh-CN/pr-review.md +341 -0
  53. package/templates/common/skills/zh-CN/refactoring.md +384 -0
  54. package/templates/common/skills/zh-CN/security-audit.md +462 -0
  55. package/templates/common/smart-guide/en/smart-guide.md +72 -0
  56. package/templates/common/smart-guide/zh-CN/smart-guide.md +72 -0
@@ -0,0 +1,341 @@
1
+ ---
2
+ name: pr-review
3
+ description: 全面的 PR 审查,包含安全、性能和代码质量检查
4
+ version: 1.0.0
5
+ author: CCJK
6
+ category: review
7
+ triggers:
8
+ - /pr-review
9
+ - /review-pr
10
+ - /pr
11
+ use_when:
12
+ - "用户想要审查拉取请求"
13
+ - "PR 需要代码审查"
14
+ - "合并请求审查"
15
+ - "用户提到审查变更"
16
+ auto_activate: true
17
+ priority: 8
18
+ difficulty: intermediate
19
+ tags:
20
+ - pr
21
+ - review
22
+ - git
23
+ - code-quality
24
+ allowed-tools:
25
+ - Bash(git *)
26
+ - Read
27
+ - Grep
28
+ - Glob
29
+ - LSP
30
+ context: fork
31
+ user-invocable: true
32
+ hooks:
33
+ - type: SkillActivate
34
+ command: echo "开始 PR 审查..."
35
+ - type: SkillComplete
36
+ command: echo "PR 审查完成"
37
+ ---
38
+
39
+ # PR 审查技能
40
+
41
+ 全面的拉取请求审查工作流,自动检查代码质量、安全性、性能和测试覆盖率。
42
+
43
+ ## 工作流步骤
44
+
45
+ ### 1. 变更分析
46
+
47
+ 首先,分析 PR 变更:
48
+
49
+ ```bash
50
+ # 获取当前分支和目标分支
51
+ git branch --show-current
52
+ git log --oneline origin/main..HEAD
53
+
54
+ # 获取变更文件
55
+ git diff --name-only origin/main...HEAD
56
+
57
+ # 获取详细的差异统计
58
+ git diff --stat origin/main...HEAD
59
+ ```
60
+
61
+ **分析清单:**
62
+ - [ ] 识别所有修改的文件
63
+ - [ ] 分类变更(功能、修复、重构、文档)
64
+ - [ ] 检查破坏性变更
65
+ - [ ] 验证提交信息质量
66
+ - [ ] 检查合并冲突
67
+
68
+ ### 2. 代码质量检查
69
+
70
+ 审查所有变更文件的代码质量:
71
+
72
+ **对于每个变更文件:**
73
+
74
+ 1. **使用 Read 工具读取文件**
75
+ 2. **检查代码异味:**
76
+ - 重复代码
77
+ - 长函数(>50 行)
78
+ - 复杂条件(>3 层)
79
+ - 魔法数字/字符串
80
+ - 不一致的命名约定
81
+
82
+ 3. **验证最佳实践:**
83
+ - 适当的错误处理
84
+ - 输入验证
85
+ - 日志记录的适当性
86
+ - 注释质量
87
+ - 代码文档
88
+
89
+ 4. **检查 TypeScript/JavaScript 特定问题:**
90
+ - 类型安全(TypeScript)
91
+ - async/await 使用
92
+ - Promise 处理
93
+ - 潜在的内存泄漏
94
+ - 正确的导入/导出
95
+
96
+ ### 3. 安全审查
97
+
98
+ 执行安全分析:
99
+
100
+ **安全清单:**
101
+ - [ ] 无硬编码的凭据或 API 密钥
102
+ - [ ] 日志中无敏感数据
103
+ - [ ] 适当的输入清理
104
+ - [ ] SQL 注入防护
105
+ - [ ] XSS 防护
106
+ - [ ] CSRF 防护
107
+ - [ ] 身份验证/授权检查
108
+ - [ ] 依赖项漏洞
109
+
110
+ **搜索常见安全问题:**
111
+
112
+ ```bash
113
+ # 搜索潜在的密钥
114
+ git grep -i "password\|secret\|api_key\|token" -- '*.ts' '*.js' '*.json'
115
+
116
+ # 检查生产代码中的 console.log
117
+ git grep "console\\.log" -- 'src/**/*.ts' 'src/**/*.js'
118
+
119
+ # 查找 eval 或危险函数
120
+ git grep -E "eval\(|Function\(|setTimeout.*string|setInterval.*string"
121
+ ```
122
+
123
+ ### 4. 性能审查
124
+
125
+ 分析性能影响:
126
+
127
+ **性能清单:**
128
+ - [ ] 无不必要的重新渲染(React)
129
+ - [ ] 高效的数据结构
130
+ - [ ] 适当的缓存策略
131
+ - [ ] 数据库查询优化
132
+ - [ ] 无 N+1 查询问题
133
+ - [ ] 适当的懒加载
134
+ - [ ] 打包大小影响
135
+ - [ ] 内存使用考虑
136
+
137
+ **检查性能反模式:**
138
+ - 循环中的同步操作
139
+ - 不必要的 API 调用
140
+ - 无分页的大数据处理
141
+ - 缺少索引(数据库)
142
+ - 低效算法(O(n²) 或更差)
143
+
144
+ ### 5. 测试覆盖率
145
+
146
+ 验证变更的测试覆盖率:
147
+
148
+ ```bash
149
+ # 查找变更文件的测试文件
150
+ git diff --name-only origin/main...HEAD | grep -E '\.(test|spec)\.(ts|js)$'
151
+
152
+ # 检查新代码是否有相应的测试
153
+ # 对于每个变更的源文件,验证测试文件是否存在
154
+ ```
155
+
156
+ **测试覆盖率清单:**
157
+ - [ ] 新函数的单元测试
158
+ - [ ] 新功能的集成测试
159
+ - [ ] 边界情况覆盖
160
+ - [ ] 错误处理测试
161
+ - [ ] Mock/Stub 使用的适当性
162
+ - [ ] 测试命名清晰度
163
+ - [ ] 断言质量
164
+
165
+ ### 6. 架构与设计
166
+
167
+ 审查架构决策:
168
+
169
+ **架构清单:**
170
+ - [ ] 遵循项目模式
171
+ - [ ] 适当的关注点分离
172
+ - [ ] SOLID 原则遵守
173
+ - [ ] DRY 原则(不要重复自己)
174
+ - [ ] 适当的抽象级别
175
+ - [ ] 依赖注入使用
176
+ - [ ] 模块耦合/内聚
177
+
178
+ ### 7. 文档审查
179
+
180
+ 检查文档质量:
181
+
182
+ **文档清单:**
183
+ - [ ] README 更新(如需要)
184
+ - [ ] API 文档
185
+ - [ ] 复杂逻辑的内联注释
186
+ - [ ] JSDoc/TSDoc 注释
187
+ - [ ] CHANGELOG 更新
188
+ - [ ] 迁移指南(破坏性变更)
189
+
190
+ ## 输出格式
191
+
192
+ 以以下结构化格式提供审查结果:
193
+
194
+ ```markdown
195
+ # PR 审查摘要
196
+
197
+ ## 概览
198
+ - **分支**: [分支名称]
199
+ - **目标**: [目标分支]
200
+ - **变更文件**: [数量]
201
+ - **新增行数**: [数量]
202
+ - **删除行数**: [数量]
203
+
204
+ ## 变更摘要
205
+ [简要描述此 PR 的功能]
206
+
207
+ ## 审查结果
208
+
209
+ ### ✅ 优点
210
+ - [列出积极方面]
211
+ - [观察到的良好实践]
212
+ - [实现良好的功能]
213
+
214
+ ### ⚠️ 发现的问题
215
+
216
+ #### 🔴 严重问题
217
+ - **[文件:行号]**: [描述]
218
+ - **影响**: [说明]
219
+ - **建议**: [如何修复]
220
+
221
+ #### 🟡 警告
222
+ - **[文件:行号]**: [描述]
223
+ - **建议**: [改进建议]
224
+
225
+ #### 🔵 建议
226
+ - **[文件:行号]**: [描述]
227
+ - **增强**: [可选改进]
228
+
229
+ ### 安全分析
230
+ - **状态**: ✅ 通过 / ⚠️ 发现问题 / 🔴 严重
231
+ - **发现**: [列出安全问题(如有)]
232
+
233
+ ### 性能分析
234
+ - **状态**: ✅ 良好 / ⚠️ 关注 / 🔴 问题
235
+ - **发现**: [列出性能问题(如有)]
236
+
237
+ ### 测试覆盖率
238
+ - **状态**: ✅ 充分 / ⚠️ 不足 / 🔴 缺失
239
+ - **覆盖率**: [百分比(如可用)]
240
+ - **缺失测试**: [列出需要测试的区域]
241
+
242
+ ### 代码质量评分
243
+ - **总体**: [10 分制评分]
244
+ - **可维护性**: [评分]
245
+ - **可读性**: [评分]
246
+ - **可测试性**: [评分]
247
+
248
+ ## 建议
249
+
250
+ ### 必须修复(合并前)
251
+ 1. [严重问题 1]
252
+ 2. [严重问题 2]
253
+
254
+ ### 应该修复(高优先级)
255
+ 1. [重要问题 1]
256
+ 2. [重要问题 2]
257
+
258
+ ### 可选改进(可选)
259
+ 1. [增强 1]
260
+ 2. [增强 2]
261
+
262
+ ## 批准状态
263
+ - [ ] ✅ **已批准** - 准备合并
264
+ - [ ] ⚠️ **有意见批准** - 可以合并但需处理意见
265
+ - [ ] 🔴 **请求变更** - 合并前必须修复问题
266
+
267
+ ## 附加说明
268
+ [任何其他观察或上下文]
269
+ ```
270
+
271
+ ## 最佳实践
272
+
273
+ 1. **建设性**: 关注改进,而非批评
274
+ 2. **具体**: 指出确切的文件和行号
275
+ 3. **解释原因**: 不仅说明问题,还要解释影响
276
+ 4. **提供解决方案**: 提供可操作的建议
277
+ 5. **认可优秀工作**: 突出积极方面
278
+ 6. **考虑上下文**: 理解项目约束和截止日期
279
+ 7. **使用示例**: 在建议变更时展示更好的替代方案
280
+
281
+ ## 常见审查模式
282
+
283
+ ### 模式 1: 功能添加
284
+ - 验证功能完整性
285
+ - 检查功能标志
286
+ - 验证错误处理
287
+ - 确保向后兼容性
288
+
289
+ ### 模式 2: Bug 修复
290
+ - 验证根本原因已解决
291
+ - 检查回归测试
292
+ - 验证修复不会引入新问题
293
+ - 审查相关代码区域
294
+
295
+ ### 模式 3: 重构
296
+ - 确保行为未改变
297
+ - 验证测试覆盖率保持
298
+ - 检查性能影响
299
+ - 验证代码简化
300
+
301
+ ### 模式 4: 依赖更新
302
+ - 审查变更日志
303
+ - 检查破坏性变更
304
+ - 验证兼容性
305
+ - 测试关键路径
306
+
307
+ ## 与 CI/CD 集成
308
+
309
+ 如果 CI/CD 结果可用,将其纳入:
310
+
311
+ ```bash
312
+ # 检查 CI 状态
313
+ gh pr checks [PR-编号]
314
+
315
+ # 查看测试结果
316
+ gh pr view [PR-编号] --json statusCheckRollup
317
+ ```
318
+
319
+ ## 最终清单
320
+
321
+ 完成审查前:
322
+
323
+ - [ ] 所有变更文件已审查
324
+ - [ ] 安全问题已解决
325
+ - [ ] 性能影响已考虑
326
+ - [ ] 测试覆盖率已验证
327
+ - [ ] 文档已检查
328
+ - [ ] 架构对齐已确认
329
+ - [ ] 破坏性变更已识别
330
+ - [ ] 批准状态已确定
331
+ - [ ] 可操作的反馈已提供
332
+ - [ ] 审查摘要已格式化
333
+
334
+ ## 注意事项
335
+
336
+ - 使用 LSP 工具获取类型检查和 linting 结果
337
+ - 利用 Grep 在代码库中进行模式匹配
338
+ - 使用 Glob 查找相关文件
339
+ - 完整读取文件以获取上下文
340
+ - 考虑 CLAUDE.md 中的项目特定指南
341
+ - 根据 PR 大小和复杂性调整审查深度
@@ -0,0 +1,384 @@
1
+ ---
2
+ name: refactoring
3
+ description: 智能代码重构,包含安全检查和最佳实践
4
+ version: 1.0.0
5
+ author: CCJK
6
+ category: dev
7
+ triggers:
8
+ - /refactor
9
+ - /rf
10
+ - /cleanup
11
+ use_when:
12
+ - "用户想要重构代码"
13
+ - "代码需要清理"
14
+ - "改进代码结构"
15
+ - "用户提到重构"
16
+ auto_activate: true
17
+ priority: 7
18
+ difficulty: intermediate
19
+ tags:
20
+ - refactoring
21
+ - code-quality
22
+ - cleanup
23
+ allowed-tools:
24
+ - Read
25
+ - Write
26
+ - Edit
27
+ - Grep
28
+ - Glob
29
+ - mcp__ide__getDiagnostics
30
+ - Bash(npm test)
31
+ - Bash(pnpm test)
32
+ - Bash(yarn test)
33
+ context: fork
34
+ user-invocable: true
35
+ hooks:
36
+ - type: PreToolUse
37
+ matcher: Edit
38
+ command: echo "编辑前创建备份..."
39
+ - type: PostToolUse
40
+ matcher: Edit
41
+ command: echo "编辑完成,正在验证..."
42
+ ---
43
+
44
+ # 代码重构
45
+
46
+ ## 上下文
47
+ $ARGUMENTS
48
+
49
+ ## 指令
50
+
51
+ 遵循安全且系统化的重构实践:
52
+
53
+ ### 安全第一
54
+
55
+ 在任何重构之前:
56
+
57
+ 1. **验证测试存在**
58
+ - 检查现有测试覆盖率
59
+ - 运行测试确保通过
60
+ - 如果没有测试,先编写测试
61
+
62
+ 2. **创建备份**
63
+ - Git 提交当前状态
64
+ - 或手动备份文件
65
+
66
+ 3. **小步前进**
67
+ - 一次只做一个改动
68
+ - 每次改动后测试
69
+ - 频繁提交
70
+
71
+ ### 重构目录
72
+
73
+ 选择合适的重构技术:
74
+
75
+ #### 1. 提取方法(Extract Method)
76
+ **何时使用**:函数过长或有重复代码
77
+ **如何操作**:
78
+ ```typescript
79
+ // 重构前
80
+ function processOrder(order) {
81
+ // 验证订单
82
+ if (!order.items || order.items.length === 0) {
83
+ throw new Error('订单为空')
84
+ }
85
+ // 计算总额
86
+ let total = 0
87
+ for (const item of order.items) {
88
+ total += item.price * item.quantity
89
+ }
90
+ // 应用折扣
91
+ if (order.coupon) {
92
+ total *= (1 - order.coupon.discount)
93
+ }
94
+ return total
95
+ }
96
+
97
+ // 重构后
98
+ function processOrder(order) {
99
+ validateOrder(order)
100
+ const subtotal = calculateSubtotal(order.items)
101
+ return applyDiscount(subtotal, order.coupon)
102
+ }
103
+
104
+ function validateOrder(order) {
105
+ if (!order.items || order.items.length === 0) {
106
+ throw new Error('订单为空')
107
+ }
108
+ }
109
+
110
+ function calculateSubtotal(items) {
111
+ return items.reduce((sum, item) =>
112
+ sum + item.price * item.quantity, 0)
113
+ }
114
+
115
+ function applyDiscount(amount, coupon) {
116
+ return coupon ? amount * (1 - coupon.discount) : amount
117
+ }
118
+ ```
119
+
120
+ #### 2. 重命名符号(Rename Symbol)
121
+ **何时使用**:名称不能清晰表达意图
122
+ **如何操作**:
123
+ - 尽可能使用 IDE 重构工具
124
+ - 谨慎搜索和替换
125
+ - 更新文档和注释
126
+
127
+ ```typescript
128
+ // 重构前
129
+ function calc(x, y) { return x * y }
130
+
131
+ // 重构后
132
+ function calculateArea(width, height) {
133
+ return width * height
134
+ }
135
+ ```
136
+
137
+ #### 3. 移动到模块(Move to Module)
138
+ **何时使用**:代码应该属于不同的模块
139
+ **如何操作**:
140
+ - 识别逻辑分组
141
+ - 将相关函数移到一起
142
+ - 更新导入/导出
143
+
144
+ ```typescript
145
+ // 重构前:utils.ts
146
+ export function validateEmail(email) { ... }
147
+ export function sendEmail(to, subject) { ... }
148
+ export function formatDate(date) { ... }
149
+
150
+ // 重构后:email.ts
151
+ export function validateEmail(email) { ... }
152
+ export function sendEmail(to, subject) { ... }
153
+
154
+ // 重构后:date.ts
155
+ export function formatDate(date) { ... }
156
+ ```
157
+
158
+ #### 4. 内联变量(Inline Variable)
159
+ **何时使用**:变量没有增加清晰度
160
+ **如何操作**:
161
+ ```typescript
162
+ // 重构前
163
+ const isValid = user.age >= 18
164
+ return isValid
165
+
166
+ // 重构后
167
+ return user.age >= 18
168
+ ```
169
+
170
+ #### 5. 提取接口(Extract Interface)
171
+ **何时使用**:多个实现共享行为
172
+ **如何操作**:
173
+ ```typescript
174
+ // 重构前
175
+ class FileLogger {
176
+ log(message: string) { ... }
177
+ }
178
+ class ConsoleLogger {
179
+ log(message: string) { ... }
180
+ }
181
+
182
+ // 重构后
183
+ interface Logger {
184
+ log(message: string): void
185
+ }
186
+
187
+ class FileLogger implements Logger {
188
+ log(message: string) { ... }
189
+ }
190
+
191
+ class ConsoleLogger implements Logger {
192
+ log(message: string) { ... }
193
+ }
194
+ ```
195
+
196
+ #### 6. 用多态替换条件(Replace Conditional with Polymorphism)
197
+ **何时使用**:基于类型的复杂条件判断
198
+ **如何操作**:
199
+ ```typescript
200
+ // 重构前
201
+ function getSpeed(vehicle) {
202
+ if (vehicle.type === 'car') {
203
+ return vehicle.enginePower * 2
204
+ } else if (vehicle.type === 'bike') {
205
+ return vehicle.gears * 10
206
+ } else if (vehicle.type === 'plane') {
207
+ return vehicle.thrust * 100
208
+ }
209
+ }
210
+
211
+ // 重构后
212
+ interface Vehicle {
213
+ getSpeed(): number
214
+ }
215
+
216
+ class Car implements Vehicle {
217
+ getSpeed() { return this.enginePower * 2 }
218
+ }
219
+
220
+ class Bike implements Vehicle {
221
+ getSpeed() { return this.gears * 10 }
222
+ }
223
+
224
+ class Plane implements Vehicle {
225
+ getSpeed() { return this.thrust * 100 }
226
+ }
227
+ ```
228
+
229
+ #### 7. 简化条件(Simplify Conditional)
230
+ **何时使用**:复杂的布尔逻辑
231
+ **如何操作**:
232
+ ```typescript
233
+ // 重构前
234
+ if (user.age >= 18 && user.hasLicense && !user.isSuspended) {
235
+ allowDriving()
236
+ }
237
+
238
+ // 重构后
239
+ function canDrive(user) {
240
+ return user.age >= 18
241
+ && user.hasLicense
242
+ && !user.isSuspended
243
+ }
244
+
245
+ if (canDrive(user)) {
246
+ allowDriving()
247
+ }
248
+ ```
249
+
250
+ #### 8. 删除死代码(Remove Dead Code)
251
+ **何时使用**:代码永远不会执行
252
+ **如何操作**:
253
+ - 使用覆盖率工具识别
254
+ - 检查 git 历史了解上下文
255
+ - 有版本控制支持,可以放心删除
256
+
257
+ ### 分步执行流程
258
+
259
+ ```markdown
260
+ ## 重构会话:[目标]
261
+
262
+ ### 1. 重构前准备
263
+ - [ ] 测试存在且通过
264
+ - [ ] 代码已提交到 git
265
+ - [ ] 重构目标已确定
266
+
267
+ ### 2. 重构步骤
268
+ **步骤 1**:[重构技术]
269
+ - 影响文件:[列表]
270
+ - 变更内容:[描述]
271
+ - 测试:✅ 通过
272
+
273
+ **步骤 2**:[下一个技术]
274
+ - 影响文件:[列表]
275
+ - 变更内容:[描述]
276
+ - 测试:✅ 通过
277
+
278
+ ### 3. 重构后验证
279
+ - [ ] 所有测试仍然通过
280
+ - [ ] 代码更清晰/更简洁
281
+ - [ ] 功能未改变
282
+ - [ ] 文档已更新
283
+ - [ ] 变更已提交
284
+ ```
285
+
286
+ ### 验证清单
287
+
288
+ 重构后验证:
289
+
290
+ - [ ] **测试通过**:所有现有测试仍然通过
291
+ - [ ] **行为未变**:功能完全相同
292
+ - [ ] **代码质量提升**:代码更清晰/更简洁
293
+ - [ ] **无新问题**:没有引入新 bug
294
+ - [ ] **文档已更新**:注释和文档反映变更
295
+ - [ ] **性能保持**:没有性能退化
296
+
297
+ ### 危险信号 - 如果出现以下情况请停止重构:
298
+
299
+ - 测试意外失败
300
+ - 你在改变行为,而不是结构
301
+ - 你在添加功能(那不是重构)
302
+ - 你已经重构了几个小时还没提交
303
+ - 你不确定代码的作用
304
+
305
+ ### 最佳实践
306
+
307
+ 1. **重构或添加功能,永远不要同时做**
308
+ - 将重构提交与功能提交分开
309
+ - 使代码审查更容易
310
+ - 需要时更容易回滚
311
+
312
+ 2. **保持测试绿色**
313
+ - 频繁运行测试
314
+ - 立即修复失败的测试
315
+ - 测试失败时不要继续
316
+
317
+ 3. **小而专注的变更**
318
+ - 一次只用一种重构技术
319
+ - 每次成功重构后提交
320
+ - 易于审查和理解
321
+
322
+ 4. **使用 IDE 工具**
323
+ - 自动重构更安全
324
+ - 不易出现拼写错误
325
+ - 自动更新所有引用
326
+
327
+ 5. **需要注意的代码异味**
328
+ - 长函数(>20 行)
329
+ - 重复代码
330
+ - 大类(>300 行)
331
+ - 长参数列表(>3 个参数)
332
+ - 复杂条件
333
+ - 魔法数字/字符串
334
+
335
+ ### 常见重构模式
336
+
337
+ **模式 1:提取和组合**
338
+ ```
339
+ 长函数 → 提取方法 → 组合可读流程
340
+ ```
341
+
342
+ **模式 2:合并重复**
343
+ ```
344
+ 重复代码 → 提取公共逻辑 → 复用
345
+ ```
346
+
347
+ **模式 3:简化复杂性**
348
+ ```
349
+ 复杂逻辑 → 分解为步骤 → 清晰意图
350
+ ```
351
+
352
+ **模式 4:改进命名**
353
+ ```
354
+ 不清晰的名称 → 重命名 → 自文档化代码
355
+ ```
356
+
357
+ ### 输出格式
358
+
359
+ ```markdown
360
+ ## 重构完成:[目标]
361
+
362
+ ### 所做变更
363
+ 1. **[技术]**:[描述]
364
+ - 文件:[列表]
365
+ - 原因:[为什么做这个重构]
366
+
367
+ 2. **[技术]**:[描述]
368
+ - 文件:[列表]
369
+ - 原因:[为什么做这个重构]
370
+
371
+ ### 指标
372
+ - 代码行数:[之前] → [之后]
373
+ - 函数数量:[之前] → [之后]
374
+ - 复杂度:[之前] → [之后]
375
+
376
+ ### 验证
377
+ - ✅ 所有测试通过
378
+ - ✅ 行为未改变
379
+ - ✅ 代码质量提升
380
+ - ✅ 文档已更新
381
+
382
+ ### 后续步骤
383
+ - [可选的后续重构]
384
+ ```