# 重構與清理 (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 行程式碼
──────────────────────────────
所有測試皆已通過 ✅
```

## 規則

- **在執行測試之前，絕對不要刪除任何東西**
- **一次只刪除一項** — 原子化變更有助於輕鬆回滾
- **如果不確定，請跳過** — 保留死碼總比破壞生產環境好
- **清理時不要進行重構** — 關注點分離 (先清理，稍後再重構)
