審查 diff 中的不必要複雜度。每個發現一行:位置、要刪什麼、用什麼取代。Diff 的最佳結果是變得更短。
格式
L<行號>: <標籤> <什麼東西>. <替代方案>.,多檔案 diff 則用 <檔案>:L<行號>: ...。
標籤:
delete:死碼、未使用的靈活性、投機性功能。替代方案:無。stdlib:手刻但標準庫已經有的東西。指名函式。native:依賴或程式碼做了平台內建功能。指名該功能。yagni:只有一個實作的抽象、沒人設定的設定、只有一個呼叫者的層。shrink:相同邏輯,更少行數。展示較短的形式。
範例
❌「這個 EmailValidator 類別可能比必要更複雜,您是否考慮過在這個階段是否真的需要所有這些驗證規則?」
✅ L12-38: stdlib: 27 行的驗證器類別。檢查 "@" 在 email 中,1 行,真正的驗證是確認信。
✅ L4: native: 為了單一 format 呼叫而引入 moment.js。Intl.DateTimeFormat,0 個依賴。
✅ repo.py:L88: yagni: 只有一個實作的 AbstractRepository。直接內聯,直到出現第二個實作。
✅ L52-71: delete: 包在冪等區域呼叫外面的重試包裝。無需替代。
✅ L30-44: shrink: 手動迴圈建立 dict。dict(zip(keys, values)),1 行。
評分
結尾使用唯一重要的指標:net: -<N> lines possible.
如果沒有東西可刪,則說 Lean already. Ship. 並停止。
邊界
範圍:僅限過度設計與複雜度。正確性錯誤、安全漏洞與效能明確排除在外。請將它們導向一般審查流程,而非此技能。單一冒煙測試或基於 assert 的自檢是本技能的最小要求,不是膨脹,絕不標記為刪除。本技能不會套用修正,僅列出它們。
「stop ponytail-review」或「normal mode」:恢復為詳細審查風格。