# 重構與清理 (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 -- ` 復原並跳過此項 5. **如果測試通過** — 繼續處理下一個項目 ## 步驟 4:處理「警告」項目 在刪除「警告」項目之前: - 搜尋動態匯入:`import()`, `require()`, `__import__` - 搜尋字串引用:配置檔案中的路由名稱、元件名稱 - 檢查是否為公共套件 API 的匯出項目 - 驗證沒有外部使用者 (如果是已發布的套件,請檢查依賴項) ## 步驟 5:合併重複項 移除死碼後,尋找: - 近乎重複的函式 (>80% 相似) — 合併為一 - 冗餘的型別定義 — 進行整合 - 無實質價值的封裝函式 (Wrapper) — 將其內聯 (Inline) - 無具體用途的重新匯出 (Re-exports) — 移除間接層 ## 步驟 6:摘要報告 回報結果: ``` 死碼清理摘要 ────────────────────────────── 已刪除: 12 個未使用的函式 3 個未使用的檔案 5 個未使用的依賴項 已跳過: 2 個項目 (測試失敗) 節省: 移除了約 450 行程式碼 ────────────────────────────── 所有測試皆已通過 ✅ ``` ## 規則 - **在執行測試之前,絕對不要刪除任何東西** - **一次只刪除一項** — 原子化變更有助於輕鬆回滾 - **如果不確定,請跳過** — 保留死碼總比破壞生產環境好 - **清理時不要進行重構** — 關注點分離 (先清理,稍後再重構)