81 lines
3.0 KiB
Markdown
81 lines
3.0 KiB
Markdown
# 重構與清理 (Refactor Clean)
|
||
|
||
安全地識別並移除死碼 (Dead code),且在每一步磁都執行測試驗證。
|
||
|
||
## 步驟 1:偵測死碼 (Dead Code)
|
||
|
||
根據專案類型執行分析工具:
|
||
|
||
| 工具 | 發現內容 | 指令 |
|
||
|------|--------------|---------|
|
||
| knip | 未使用的匯出、檔案、依賴項 | `npx knip` |
|
||
| depcheck | 未使用的 npm 依賴項 | `npx depcheck` |
|
||
| ts-prune | 未使用的 TypeScript 匯出 | `npx ts-prune` |
|
||
| vulture | 未使用的 Python 程式碼 | `vulture src/` |
|
||
| deadcode | 未使用的 Go 程式碼 | `deadcode ./...` |
|
||
| cargo-udeps | 未使用的 Rust 依賴項 | `cargo +nightly udeps` |
|
||
|
||
如果沒有可用工具,請使用 Grep 尋找匯入次數為零的匯出內容:
|
||
```
|
||
# 尋找匯出項目,然後檢查其是否在任何地方被匯入
|
||
```
|
||
|
||
## 步驟 2:將結果分類
|
||
|
||
將發現的內容按安全等級分類:
|
||
|
||
| 等級 | 範例 | 行動 |
|
||
|------|----------|--------|
|
||
| **安全 (SAFE)** | 未使用的工具函式、測試助手、內部函式 | 放心刪除 |
|
||
| **警告 (CAUTION)** | 元件、API 路由、中介軟體 (Middleware) | 驗證無動態匯入或外部使用者 |
|
||
| **危險 (DANGER)** | 配置檔案、入口點、型別定義 | 觸碰前需深入調查 |
|
||
|
||
## 步驟 3:安全刪除迴圈 (Safe Deletion Loop)
|
||
|
||
針對每個標記為「安全」的項目:
|
||
|
||
1. **執行完整測試套件** — 建立基準線 (確保全部通過)
|
||
2. **刪除死碼** — 使用 Edit 工具進行精確刪除
|
||
3. **重新執行測試套件** — 驗證是否造成損壞
|
||
4. **如果測試失敗** — 立即使用 `git checkout -- <file>` 復原並跳過此項
|
||
5. **如果測試通過** — 繼續處理下一個項目
|
||
|
||
## 步驟 4:處理「警告」項目
|
||
|
||
在刪除「警告」項目之前:
|
||
- 搜尋動態匯入:`import()`, `require()`, `__import__`
|
||
- 搜尋字串引用:配置檔案中的路由名稱、元件名稱
|
||
- 檢查是否為公共套件 API 的匯出項目
|
||
- 驗證沒有外部使用者 (如果是已發布的套件,請檢查依賴項)
|
||
|
||
## 步驟 5:合併重複項
|
||
|
||
移除死碼後,尋找:
|
||
- 近乎重複的函式 (>80% 相似) — 合併為一
|
||
- 冗餘的型別定義 — 進行整合
|
||
- 無實質價值的封裝函式 (Wrapper) — 將其內聯 (Inline)
|
||
- 無具體用途的重新匯出 (Re-exports) — 移除間接層
|
||
|
||
## 步驟 6:摘要報告
|
||
|
||
回報結果:
|
||
|
||
```
|
||
死碼清理摘要
|
||
──────────────────────────────
|
||
已刪除: 12 個未使用的函式
|
||
3 個未使用的檔案
|
||
5 個未使用的依賴項
|
||
已跳過: 2 個項目 (測試失敗)
|
||
節省: 移除了約 450 行程式碼
|
||
──────────────────────────────
|
||
所有測試皆已通過 ✅
|
||
```
|
||
|
||
## 規則
|
||
|
||
- **在執行測試之前,絕對不要刪除任何東西**
|
||
- **一次只刪除一項** — 原子化變更有助於輕鬆回滾
|
||
- **如果不確定,請跳過** — 保留死碼總比破壞生產環境好
|
||
- **清理時不要進行重構** — 關注點分離 (先清理,稍後再重構)
|