# 代码质量与测试指南

## 目录

1. [代码质量工具](#代码质量工具)
2. [代码复杂度检测](#代码复杂度检测)
3. [Git Hooks](#git-hooks)
4. [使用指南](#使用指南)

## 代码质量工具

### ESLint

- **配置文件**: eslint.config.js
- **功能**: JavaScript/TypeScript 代码质量检查
- **集成插件**:
  - `@typescript-eslint`: TypeScript 支持
  - `eslint-plugin-vue`: Vue 文件检查
  - `eslint-plugin-promise`: Promise 最佳实践
  - `eslint-config-prettier`: 禁用与 Prettier 冲突的规则
  - `eslint-plugin-prettier`: 将 Prettier 作为 ESLint 规则运行

### Prettier

- **配置文件**: prettier.config.js
- **功能**: 代码格式化工具
- **集成**: 与 ESLint 协同工作，避免冲突

### EditorConfig

- **配置文件**: `.editorconfig`
- **功能**: 跨编辑器代码风格统一

## 代码复杂度检测

### 检测规则

- **最大嵌套深度**: 4 层
- **函数最大行数**: 50 行
- **函数最大参数**: 4 个
- **函数最大语句数**: 10 条
- **文件最大行数**: 300 行

### 配置位置

代码复杂度检测规则已集成在主 ESLint 配置文件中：

```javascript
{
  rules: {
    // 代码复杂度规则
    'max-depth': ['warn', 4],           // 最大嵌套深度
    'max-lines': ['warn', 300],         // 文件最大行数
    'max-lines-per-function': ['warn', 50], // 函数最大行数
    'max-nested-callbacks': ['warn', 3],    // 最大嵌套回调
    'max-params': ['warn', 4],          // 函数最大参数
    'max-statements': ['warn', 10],     // 函数最大语句数
  }
}
```

## Git Hooks

### Pre-commit Hook

- **工具**: lint-staged + husky
- **执行流程**:
  1. Prettier 格式化代码
  2. ESLint 修复代码问题

配置文件: `.husky/pre-commit`

```bash
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
lint-staged
```

### Commit-msg Hook

- **工具**: commitlint + husky
- **功能**: 提交信息格式验证
- **规则**:
  - 类型必须在规定范围内
  - 主题长度限制 (4-50 字符)
  - 提交信息总长度限制 (100 字符)

配置文件: `.husky/commit-msg`

```bash
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
commitlint --edit "$1"
```

## 使用指南

### 代码质量检查

```bash
# 检查代码质量
pnpm lint

# 自动修复代码问题
pnpm lint:fix

# 代码格式化
pnpm format
```

### 代码复杂度检查

```bash
# 检查代码复杂度（已集成在 ESLint 中）
pnpm lint
```

### Git Hooks 使用

```bash
# 提交代码时自动执行代码质量检查
git add .
git commit -m "update: 添加新功能"

# 手动运行 pre-commit 检查
npx lint-staged

# 手动验证提交信息格式
npx commitlint --from HEAD~1 --to HEAD --verbose
```

## 最佳实践

1. **保持简洁**: 遵循代码复杂度规则
2. **持续集成**: 利用 Git Hooks 自动检查
3. **定期检查**: 定期运行完整质量检查
4. **格式统一**: 使用 Prettier 保持代码风格一致
5. **类型安全**: 充分利用 TypeScript 的类型检查功能
