Initial commit
This commit is contained in:
172
commands/pr-review.md
Normal file
172
commands/pr-review.md
Normal file
@@ -0,0 +1,172 @@
|
||||
## PR 審查
|
||||
|
||||
通過 Pull Request 的系統化審查確保代碼質量和架構健全性。
|
||||
|
||||
### 使用方法
|
||||
|
||||
```bash
|
||||
# PR 的全面審查
|
||||
gh pr view 123 --comments
|
||||
"系統化審查這個 PR,從代碼質量、安全性、架構角度提供反饋"
|
||||
|
||||
# 安全性專注審查
|
||||
gh pr diff 123
|
||||
"專注于安全風險和漏洞進行審查"
|
||||
|
||||
# 架構視角的審查
|
||||
gh pr checkout 123 && find . -name "*.js" | head -10
|
||||
"從層級分離、依賴關系、SOLID 原則的角度評估架構"
|
||||
```
|
||||
|
||||
### 基本示例
|
||||
|
||||
```bash
|
||||
# 代碼質量的數值評估
|
||||
find . -name "*.js" -exec wc -l {} + | sort -rn | head -5
|
||||
"評估代碼的復杂度、函數大小、重復度並指出改進點"
|
||||
|
||||
# 安全漏洞檢查
|
||||
grep -r "password\|secret\|token" . --include="*.js" | head -10
|
||||
"檢查敏感資訊洩露、硬編碼、認證绕過的風險"
|
||||
|
||||
# 架構违規檢測
|
||||
grep -r "import.*from.*\\.\\./\\.\\." . --include="*.js"
|
||||
"評估層級违規、循環依賴、耦合度問題"
|
||||
```
|
||||
|
||||
### 評論分類體系
|
||||
|
||||
```text
|
||||
🔴 critical.must: 致命問題
|
||||
├─ 安全漏洞
|
||||
├─ 數據一致性問題
|
||||
└─ 系統故障風險
|
||||
|
||||
🟡 high.imo: 高優先級改進
|
||||
├─ 功能故障風險
|
||||
├─ 性能問題
|
||||
└─ 可維護性大幅降低
|
||||
|
||||
🟢 medium.imo: 中優先級改進
|
||||
├─ 可讀性提升
|
||||
├─ 代碼結構改進
|
||||
└─ 測試質量提升
|
||||
|
||||
🟢 low.nits: 轻微指摘
|
||||
├─ 風格統一
|
||||
├─ 拼寫錯誤更正
|
||||
└─ 注釋添加
|
||||
|
||||
🔵 info.q: 問題·資訊提供
|
||||
├─ 實現意圖確認
|
||||
├─ 設計決策背景
|
||||
└─ 最佳實践分享
|
||||
```
|
||||
|
||||
### 審查觀點
|
||||
|
||||
#### 1. 代碼正確性
|
||||
|
||||
- **邏輯錯誤**: 邊界值、Null 檢查、異常處理
|
||||
- **數據一致性**: 類型安全、驗證
|
||||
- **錯誤處理**: 全面性、適当處理
|
||||
|
||||
#### 2. 安全性
|
||||
|
||||
- **認證·授權**: 適当檢查、權限管理
|
||||
- **輸入驗證**: SQL 注入、XSS 對策
|
||||
- **敏感資訊**: 禁止日誌輸出、加密
|
||||
|
||||
#### 3. 性能
|
||||
|
||||
- **算法**: 時間復杂度、內存效率
|
||||
- **數據庫**: N+1 查询、索引優化
|
||||
- **資源**: 內存洩漏、緩存利用
|
||||
|
||||
#### 4. 架構
|
||||
|
||||
- **層級分離**: 依賴方向、適当分離
|
||||
- **耦合度**: 松耦合、接口使用
|
||||
- **SOLID 原則**: 單一职責、開闭原則、依賴倒置
|
||||
|
||||
### 審查流程
|
||||
|
||||
1. **事前確認**: PR 資訊、變更差異、相關 Issue
|
||||
2. **系統化檢查**: 安全性 → 正確性 → 性能 → 架構
|
||||
3. **建設性反饋**: 具體改進建議和代碼示例
|
||||
4. **後續跟進**: 更正確認、CI 狀態、最終批準
|
||||
|
||||
### 有效的評論示例
|
||||
|
||||
#### 安全問題模板
|
||||
|
||||
**格式:**
|
||||
|
||||
```text
|
||||
**critical.must.** [問題描述]
|
||||
|
||||
[改進建議代碼]
|
||||
|
||||
[説明文字]
|
||||
```
|
||||
|
||||
**示例:**
|
||||
|
||||
```text
|
||||
**critical.must.** 密碼以明文保存
|
||||
|
||||
// 更正建議
|
||||
const bcrypt = require('bcrypt');
|
||||
const hashedPassword = await bcrypt.hash(password, 12);
|
||||
|
||||
為防止安全風險,必须進行哈希處理。
|
||||
```
|
||||
|
||||
#### 性能改進模板
|
||||
|
||||
**格式:**
|
||||
|
||||
```text
|
||||
**high.imo.** [性能問題描述]
|
||||
|
||||
[改進建議代碼]
|
||||
|
||||
[效果說明]
|
||||
```
|
||||
|
||||
**示例:**
|
||||
|
||||
```text
|
||||
**high.imo.** 會發生 N+1 查询問題
|
||||
|
||||
// 改進建議: Eager Loading
|
||||
const users = await User.findAll({ include: [Post] });
|
||||
|
||||
可以大幅减少查询數量。
|
||||
```
|
||||
|
||||
#### 架構违規模板
|
||||
|
||||
**格式:**
|
||||
|
||||
```text
|
||||
**high.must.** [架構問題描述]
|
||||
|
||||
[具體說明和解決方案]
|
||||
```
|
||||
|
||||
**示例:**
|
||||
|
||||
```text
|
||||
**high.must.** 發生了層級违規
|
||||
|
||||
領域層直接依賴基礎設施層。
|
||||
請通過依賴倒置原則引入接口。
|
||||
```
|
||||
|
||||
### 注意事項
|
||||
|
||||
- **建設性語气**: 協作而非攻擊性的沟通
|
||||
- **具體建議**: 不仅指出問題,還要提供解決方案
|
||||
- **優先級排序**: 按 Critical → High → Medium → Low 顺序處理
|
||||
- **持續改進**: 將審查結果知識庫化
|
||||
Reference in New Issue
Block a user