mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-04-26 01:10:16 +08:00
## 文档(全部中文) - AGENTS.md - 完整的 AI 编码指南(中文版) - CONTRIBUTING.md - 贡献指南 - DEVELOPMENT.md - 开发文档 - DEPLOYMENT.md - 部署文档 - TESTING.md - 测试文档 - TROUBLESHOOTING.md - 问题排查指南 - FAQ.md - 常见问题 - WORKFLOW.md - 标准开发流程文档 ## AI 工作流(9个详细工作流) - feature-development.md - 新功能开发流程 - bug-fix.md - Bug 修复流程 - code-review.md - 代码审查流程 - testing.md - 测试编写流程 - release.md - 发布流程 - refactoring.md - 代码重构流程 - documentation.md - 文档更新流程 - performance-optimization.md - 性能优化流程 - security-audit.md - 安全审计流程 ## 测试基础设施 - vitest.config.ts - Vitest 单元测试配置 - playwright.config.ts - Playwright E2E 测试配置 - src/__tests__/setup.ts - 测试环境设置 - src/__tests__/unit/downloadStatus.test.ts - 示例单元测试 - e2e/basic.spec.ts - 示例 E2E 测试 ## CI/CD - .github/workflows/test.yml - 新建测试 CI 工作流 - .github/workflows/build.yml - 更新构建工作流,添加测试步骤 ## Issue 模板 - 更新 bug_report.md 为标准 Bug 报告模板 - 更新 help_wanted.md 为标准功能请求模板 ## 配置更新 - package.json - 添加测试依赖和 7 个新的 npm 脚本 - .gitignore - 添加测试相关忽略项 ## 新增 npm 脚本 - test - 运行单元测试 - test:watch - 监听模式 - test:coverage - 生成覆盖率报告 - test:e2e - 运行 E2E 测试 - test:e2e:ui - E2E UI 模式 - test:e2e:debug - E2E 调试模式 - test:all - 运行所有测试 ## 新增测试依赖 - @playwright/test ^1.40.0 - @testing-library/jest-dom ^6.1.5 - @testing-library/vue ^8.0.1 - @vitest/coverage-v8 ^1.0.0 - @vue/test-utils ^2.4.3 - jsdom ^23.0.1 - vitest ^1.0.0
246 lines
3.6 KiB
Markdown
246 lines
3.6 KiB
Markdown
---
|
||
description: 代码审查流程
|
||
---
|
||
|
||
## 工作流说明
|
||
|
||
此工作流指导如何进行代码审查。
|
||
|
||
## 审查清单
|
||
|
||
### 代码质量
|
||
|
||
- [ ] 代码遵循项目规范
|
||
- [ ] TypeScript 类型正确
|
||
- [ ] 没有 `any` 类型(除非必要)
|
||
- [ ] ESLint 和 Prettier 通过
|
||
- [ ] 代码可读性良好
|
||
|
||
### 功能实现
|
||
|
||
- [ ] 实现符合需求
|
||
- [ ] 边界情况处理
|
||
- [ ] 错误处理完善
|
||
- [ ] 没有引入新 Bug
|
||
|
||
### 测试
|
||
|
||
- [ ] 包含足够的测试
|
||
- [ ] 测试覆盖率合理
|
||
- [ ] 所有测试通过
|
||
- [ ] E2E 测试(如需要)
|
||
|
||
### 文档
|
||
|
||
- [ ] 更新了相关文档
|
||
- [ ] 代码注释充分
|
||
- [ ] API 文档(如需要)
|
||
- [ ] CHANGELOG.md(如需要)
|
||
|
||
### 安全性
|
||
|
||
- [ ] 没有安全漏洞
|
||
- [ ] 输入验证完善
|
||
- [ ] 权限检查正确
|
||
- [ ] 敏感信息保护
|
||
|
||
### 性能
|
||
|
||
- [ ] 没有明显的性能问题
|
||
- [ ] 内存使用合理
|
||
- [ ] 没有不必要的渲染
|
||
- [ ] 资源加载优化
|
||
|
||
## 审查流程
|
||
|
||
### 1. 理解变更
|
||
|
||
- 阅读 PR 描述
|
||
- 查看 Issue 链接
|
||
- 理解变更目的
|
||
- 检查变更范围
|
||
|
||
### 2. 代码审查
|
||
|
||
**主进程代码:**
|
||
|
||
```bash
|
||
# 检查类型安全
|
||
npx tsc --noEmit
|
||
|
||
# 检查代码质量
|
||
npm run lint
|
||
```
|
||
|
||
**渲染进程代码:**
|
||
|
||
- 组件结构
|
||
- 状态管理
|
||
- 事件处理
|
||
- 样式实现
|
||
|
||
### 3. 测试验证
|
||
|
||
```bash
|
||
# 运行单元测试
|
||
npm run test
|
||
|
||
# 运行 E2E 测试
|
||
npm run test:e2e
|
||
|
||
# 检查覆盖率
|
||
npm run test:coverage
|
||
```
|
||
|
||
### 4. 提供反馈
|
||
|
||
**正面反馈:**
|
||
|
||
- 好的实现
|
||
- 优秀的代码
|
||
- 有价值的贡献
|
||
|
||
**建设性反馈:**
|
||
|
||
- 指出问题
|
||
- 提出建议
|
||
- 解释原因
|
||
|
||
**反馈格式:**
|
||
|
||
````markdown
|
||
### 问题
|
||
|
||
**位置:** `src/components/AppCard.vue:45`
|
||
|
||
**描述:** 这里缺少错误处理,可能导致应用崩溃。
|
||
|
||
**建议:**
|
||
|
||
```typescript
|
||
try {
|
||
await installPackage();
|
||
} catch (error) {
|
||
console.error("Install failed:", error);
|
||
showError(error.message);
|
||
}
|
||
```
|
||
````
|
||
|
||
````
|
||
|
||
### 5. 批准或要求修改
|
||
|
||
**批准条件:**
|
||
- 所有审查项目通过
|
||
- 所有测试通过
|
||
- CI 检查通过
|
||
- 没有阻塞问题
|
||
|
||
**要求修改:**
|
||
- 指出必须修复的问题
|
||
- 给出明确的修改建议
|
||
- 等待作者响应
|
||
|
||
## 审查原则
|
||
|
||
### 及时性
|
||
|
||
- 尽快响应 PR
|
||
- 设定响应时间预期
|
||
- 优先处理紧急 PR
|
||
|
||
### 建设性
|
||
|
||
- 提供具体的反馈
|
||
- 给出改进建议
|
||
- 解释审查理由
|
||
|
||
### 尊重
|
||
|
||
- 尊重作者的贡献
|
||
- 使用礼貌的语言
|
||
- 认可好的实现
|
||
|
||
### 一致性
|
||
|
||
- 遵循项目规范
|
||
- 保持审查标准一致
|
||
- 参考之前类似 PR
|
||
|
||
## 常见问题
|
||
|
||
### 类型安全问题
|
||
|
||
**问题:** 使用了 `any` 类型
|
||
|
||
**建议:**
|
||
```typescript
|
||
// ❌ 避免
|
||
const data: any = response;
|
||
|
||
// ✅ 推荐
|
||
interface ResponseData {
|
||
id: string;
|
||
name: string;
|
||
}
|
||
const data: ResponseData = response;
|
||
````
|
||
|
||
### 代码重复
|
||
|
||
**问题:** 代码重复
|
||
|
||
**建议:**
|
||
|
||
```typescript
|
||
// 提取公共函数
|
||
function formatSize(size: number): string {
|
||
return size > 1024 ? `${size / 1024} MB` : `${size} KB`;
|
||
}
|
||
```
|
||
|
||
### 错误处理
|
||
|
||
**问题:** 缺少错误处理
|
||
|
||
**建议:**
|
||
|
||
```typescript
|
||
async function loadApps() {
|
||
try {
|
||
const response = await axios.get("/api/apps");
|
||
return response.data;
|
||
} catch (error) {
|
||
logger.error({ err: error }, "Failed to load apps");
|
||
throw error;
|
||
}
|
||
}
|
||
```
|
||
|
||
## 审查后操作
|
||
|
||
### 批准
|
||
|
||
- 点击 "Approve review"
|
||
- 添加评论(可选)
|
||
- 等待合并
|
||
|
||
### 要求修改
|
||
|
||
- 选择 "Request changes"
|
||
- 提供详细反馈
|
||
- 等待作者更新
|
||
|
||
### 评论
|
||
|
||
- 选择 "Comment"
|
||
- 提供建议或问题
|
||
- 不阻止合并
|
||
|
||
## 相关文档
|
||
|
||
- [CONTRIBUTING.md](../../CONTRIBUTING.md) - 贡献指南
|
||
- [DEVELOPMENT.md](../../DEVELOPMENT.md) - 开发文档
|
||
- [AGENTS.md](../../AGENTS.md) - AI 编码指南
|