# Pre-commit Hook ## Purpose 定义基于 lefthook 的 pre-commit hook 配置,在 git commit 时自动运行 lint 检查,拦截违规代码提交。 ## ADDED Requirements ### Requirement: lefthook 配置 系统 SHALL 通过 `lefthook.yml` 配置 pre-commit hook。 #### Scenario: 配置文件位置 - **WHEN** 配置 lefthook - **THEN** 配置文件 SHALL 位于项目根目录 `lefthook.yml` #### Scenario: pre-commit hook 安装 - **WHEN** 开发者首次克隆项目 - **THEN** 运行 `lefthook install` SHALL 安装 git hooks - **THEN** hooks SHALL 自动注册到 .git/hooks/ ### Requirement: Go 文件变更触发 lint 系统 SHALL 在 Go 文件变更时自动运行 golangci-lint。 #### Scenario: 检测到 Go 文件变更 - **WHEN** git commit 中包含 backend/**/*.go 文件的变更 - **THEN** SHALL 自动运行 golangci-lint #### Scenario: 增量检查 - **WHEN** 运行 lint - **THEN** SHALL 只检查 staged 文件(使用 --new-from-rev HEAD) - **THEN** SHALL NOT 检查整个代码库 #### Scenario: lint 通过 - **WHEN** golangci-lint 检查通过 - **THEN** commit SHALL 正常完成 #### Scenario: lint 失败 - **WHEN** golangci-lint 检查发现违规 - **THEN** commit SHALL 被拒绝 - **THEN** SHALL 显示具体的违规信息和修复建议 #### Scenario: 无 Go 文件变更 - **WHEN** git commit 不包含 Go 文件变更 - **THEN** SHALL NOT 运行 golangci-lint - **THEN** commit SHALL 正常完成