Skip to content

Commit d3650db

Browse files
author
JiayuXu
committed
docs: 添加 pre-commit hooks 文档并更新配置
添加详细的 pre-commit hooks 使用指南文档 更新 .pre-commit-config.yaml 配置,增加更多检查项 在 README 和 CLAUDE 文档中添加 hooks 使用说明
1 parent 318fdab commit d3650db

4 files changed

Lines changed: 233 additions & 17 deletions

File tree

.pre-commit-config.yaml

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,45 @@
1+
# Pre-commit hooks configuration
2+
# 如果不想使用 pre-commit hooks,可以运行: pre-commit uninstall
3+
# 或者在提交时跳过检查: git commit --no-verify
4+
15
repos:
26
- repo: https://github.com/pre-commit/pre-commit-hooks
3-
rev: v4.4.0
7+
rev: v4.5.0
48
hooks:
5-
- id: trailing-whitespace
6-
- id: end-of-file-fixer
7-
- id: check-yaml
8-
- id: check-added-large-files
9-
- id: check-merge-conflict
10-
- id: debug-statements
9+
- id: trailing-whitespace # 移除行尾空格
10+
- id: end-of-file-fixer # 确保文件以换行符结尾
11+
- id: check-yaml # 检查YAML语法
12+
args: ['--unsafe'] # 允许自定义标签
13+
- id: check-added-large-files # 检查大文件
14+
args: ['--maxkb=10000'] # 限制10MB
15+
- id: check-merge-conflict # 检查合并冲突标记
16+
- id: debug-statements # 检查调试语句
17+
- id: check-json # 检查JSON语法
18+
- id: check-toml # 检查TOML语法
19+
- id: check-xml # 检查XML语法
20+
- id: mixed-line-ending # 检查行结束符
21+
- id: check-case-conflict # 检查文件名大小写冲突
1122

1223
- repo: https://github.com/astral-sh/ruff-pre-commit
13-
rev: v0.1.9
24+
rev: v0.8.0
1425
hooks:
15-
- id: ruff
26+
- id: ruff # Python代码检查
1627
args: [--fix, --exit-non-zero-on-fix]
17-
- id: ruff-format
28+
types_or: [python, pyi, jupyter]
29+
- id: ruff-format # Python代码格式化
30+
types_or: [python, pyi, jupyter]
31+
32+
# 可选: 添加类型检查 (如需要可取消注释)
33+
# - repo: https://github.com/pre-commit/mirrors-mypy
34+
# rev: v1.8.0
35+
# hooks:
36+
# - id: mypy
37+
# additional_dependencies: [types-all]
38+
# args: [--ignore-missing-imports]
39+
40+
# 可选: 安全检查 (如需要可取消注释)
41+
# - repo: https://github.com/PyCQA/bandit
42+
# rev: '1.7.5'
43+
# hooks:
44+
# - id: bandit
45+
# args: ['-r', 'src/', '-f', 'json', '-o', 'bandit-report.json']

CLAUDE.md

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,36 @@ uv run pytest --cov=src --cov-report=html
5757
```
5858

5959
### Code Quality
60+
61+
#### 🔧 Pre-commit Hooks (自动化)
6062
```bash
61-
# Format code with black
62-
uv run black src/
63+
# hooks 会在 uv sync 时自动安装并配置
64+
# 每次 git commit 时自动运行,确保代码质量
65+
66+
# 手动运行所有检查
67+
uv run pre-commit run --all-files
6368

64-
# Sort imports
65-
uv run isort src/
69+
# 禁用 hooks (如不需要)
70+
uv run pre-commit uninstall
6671

67-
# Run linter
68-
uv run ruff check src/
72+
# 跳过单次检查 (紧急提交)
73+
git commit --no-verify -m "urgent fix"
74+
```
6975

70-
# Type checking
76+
#### ⚙️ 手动检查命令
77+
```bash
78+
# 代码检查和自动修复 (替代 black + isort)
79+
uv run ruff check --fix src/
80+
81+
# 代码格式化
82+
uv run ruff format src/
83+
84+
# 类型检查 (可选)
7185
uv run mypy src/
7286
```
7387

88+
📖 **详细配置**: 查看 [docs/pre-commit-guide.md](docs/pre-commit-guide.md)
89+
7490
### Docker Operations
7591
```bash
7692
# Build image

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,10 +467,29 @@ uv run pytest --cov=src --cov-report=html
467467

468468
### 代码规范
469469

470+
#### 🔧 Pre-commit Hooks (推荐)
471+
```bash
472+
# hooks 会在 uv sync 时自动安装
473+
# 每次 git commit 时自动运行代码检查和格式化
474+
475+
# 手动运行所有检查
476+
uv run pre-commit run --all-files
477+
478+
# 如不想使用 hooks,可以禁用
479+
uv run pre-commit uninstall
480+
481+
# 跳过单次检查 (紧急情况)
482+
git commit --no-verify -m "urgent fix"
483+
```
484+
485+
#### 📋 编码标准
470486
- 遵循 **PEP 8** 编码规范
471487
- 使用 **Google风格** 文档字符串
472488
- 添加 **类型注解** 到所有函数
473489
- 编写 **单元测试** 覆盖关键功能
490+
- 使用 **ruff** 进行代码检查和格式化
491+
492+
📖 **详细说明**: 查看 [Pre-commit Hooks 指南](docs/pre-commit-guide.md)
474493

475494
## 📄 许可证
476495

docs/pre-commit-guide.md

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
# Pre-commit Hooks 使用指南
2+
3+
本项目使用 pre-commit hooks 确保代码质量和一致性。
4+
5+
## 🔧 什么是 Pre-commit Hooks?
6+
7+
Pre-commit hooks 是在每次 `git commit` 之前自动运行的脚本,用于:
8+
- 自动格式化代码
9+
- 检查代码质量
10+
- 防止低质量代码提交
11+
12+
## ✅ 启用的检查项
13+
14+
### 基础检查
15+
- **trailing-whitespace**: 移除行尾空格
16+
- **end-of-file-fixer**: 确保文件以换行符结尾
17+
- **check-yaml/json/toml/xml**: 检查文件语法
18+
- **check-added-large-files**: 防止提交大文件 (>10MB)
19+
- **check-merge-conflict**: 检查合并冲突标记
20+
- **debug-statements**: 检查调试语句 (如 `pdb.set_trace()`)
21+
- **mixed-line-ending**: 统一行结束符
22+
- **check-case-conflict**: 防止文件名大小写冲突
23+
24+
### Python 代码检查
25+
- **ruff**: 代码质量检查和自动修复
26+
- **ruff-format**: 代码格式化 (替代 black)
27+
28+
## 🚀 使用方法
29+
30+
### 自动安装 (推荐)
31+
```bash
32+
# 克隆项目后自动安装
33+
uv sync # hooks 会自动安装
34+
```
35+
36+
### 手动安装
37+
```bash
38+
# 安装 pre-commit
39+
uv add --dev pre-commit
40+
41+
# 安装 hooks
42+
uv run pre-commit install
43+
```
44+
45+
### 手动运行检查
46+
```bash
47+
# 检查所有文件
48+
uv run pre-commit run --all-files
49+
50+
# 检查特定文件
51+
uv run pre-commit run --files src/main.py
52+
53+
# 只运行 ruff 检查
54+
uv run pre-commit run ruff --all-files
55+
```
56+
57+
## 🔄 工作流程
58+
59+
1. **编写代码** - 正常开发
60+
2. **提交代码** - `git commit -m "your message"`
61+
3. **自动检查** - pre-commit 自动运行
62+
4. **如有问题** - 自动修复或提示手动修复
63+
5. **重新提交** - 修复后重新 commit
64+
65+
## 🛑 如何禁用 Pre-commit Hooks
66+
67+
### 方法1: 完全卸载 (不推荐)
68+
```bash
69+
# 卸载 hooks
70+
uv run pre-commit uninstall
71+
72+
# 重新安装
73+
uv run pre-commit install
74+
```
75+
76+
### 方法2: 跳过单次检查
77+
```bash
78+
# 跳过本次检查 (谨慎使用)
79+
git commit --no-verify -m "urgent fix"
80+
```
81+
82+
### 方法3: 禁用特定检查
83+
编辑 `.pre-commit-config.yaml`,注释掉不需要的 hooks:
84+
85+
```yaml
86+
- repo: https://github.com/pre-commit/pre-commit-hooks
87+
rev: v4.5.0
88+
hooks:
89+
- id: trailing-whitespace
90+
# - id: debug-statements # 注释掉不需要的检查
91+
```
92+
93+
### 方法4: 设置环境变量
94+
```bash
95+
# 临时禁用
96+
export SKIP=ruff,ruff-format
97+
git commit -m "message"
98+
99+
# 或在 .env 中设置
100+
echo "SKIP=ruff" >> .env
101+
```
102+
103+
## 🎯 推荐配置
104+
105+
### 团队开发 (推荐全部启用)
106+
适合需要统一代码风格的团队项目。
107+
108+
### 个人项目 (可选择性启用)
109+
```yaml
110+
# 最小化配置 - 只保留基本检查
111+
repos:
112+
- repo: https://github.com/astral-sh/ruff-pre-commit
113+
rev: v0.8.0
114+
hooks:
115+
- id: ruff
116+
args: [--fix]
117+
- id: ruff-format
118+
```
119+
120+
### 严格模式 (取消注释可选项)
121+
启用 mypy 类型检查和 bandit 安全检查。
122+
123+
## ❓ 常见问题
124+
125+
### Q: 提交很慢怎么办?
126+
A: 首次运行会下载工具,后续会很快。可以用 `--no-verify` 跳过紧急提交。
127+
128+
### Q: 格式化改动太多?
129+
A: 先运行 `uv run pre-commit run --all-files` 一次性格式化所有文件。
130+
131+
### Q: 想自定义规则?
132+
A: 编辑 `pyproject.toml` 中的 ruff 配置:
133+
134+
```toml
135+
[tool.ruff]
136+
extend-ignore = ["E501"] # 忽略行长度检查
137+
```
138+
139+
### Q: CI/CD 中如何使用?
140+
A: 在 GitHub Actions 中:
141+
142+
```yaml
143+
- name: Run pre-commit
144+
run: |
145+
uv sync
146+
uv run pre-commit run --all-files
147+
```
148+
149+
## 📚 参考资源
150+
151+
- [Pre-commit 官方文档](https://pre-commit.com/)
152+
- [Ruff 配置指南](https://docs.astral.sh/ruff/)
153+
- [项目 CLAUDE.md](../CLAUDE.md) - 完整开发指南

0 commit comments

Comments
 (0)