finding-duplicate-functions
作者 obra使用 finding-duplicate-functions 技能來找出語意重複:也就是名稱或實作不同,但其實在做同一件事的函式。它特別適合 LLM 產生、且快速擴張的 JavaScript 或 TypeScript 程式碼庫,也支援在 Code Review、整併規劃,以及重構前的清理階段使用 finding-duplicate-functions。
此技能獲得 78/100,代表它很適合需要可重複流程來找出語意重複函式的目錄使用者。這個 repository 具備明確的使用情境、多步驟流程,以及可減少猜測的支援腳本,比起通用提示詞更有操作性;但它仍屬於較專門的工具,而且缺少安裝指令與更完整的操作文件。
- 觸發情境清楚:明確用於稽核程式碼庫中的語意重複函式,尤其適合 LLM 產生的程式碼庫。
- 流程具體:包含 extract -> categorize -> split -> detect -> report,各步驟都有對應腳本。
- 操作指引實用:提供工具/模型提示(categorization 用 haiku,semantic analysis 用 opus)與輸出預期。
- 範圍較窄:聚焦在 TypeScript/JavaScript 函式分析,可能不適合非 JS 程式碼庫。
- SKILL.md 裡沒有安裝指令或更完整的設定文件,因此使用者必須自行推斷如何把這些腳本接到自己的工作流程。
finding-duplicate-functions 技能概覽
finding-duplicate-functions 技能可以幫你找出那些「做同一件事,但名稱或實作看起來不同」的函式。它最適合用在 LLM 生成的程式碼,或快速成長的程式碼庫中,因為這類專案的語意重複通常比單純複製貼上的重複更快累積。如果你是在找 finding-duplicate-functions for Code Review,這個技能的目標是幫你做整併決策,不是挑語法或風格上的小毛病。
這個 finding-duplicate-functions 技能是做什麼的
這個 finding-duplicate-functions 技能是為了辨識「意圖相同、程式碼不同」的情境而設計:互相重疊的 helper、被重新實作的 utility,或分散在不同檔案中的近似邏輯。它特別適合在重構前、清理程式碼時,或在像 jscpd 這類語法重複工具已經處理完完全相同的複製內容之後使用。
哪些人應該安裝它
如果你在審查 JavaScript 或 TypeScript 程式庫,而且裡面有很多小型 utility、產生出來的檔案,或多位貢獻者,建議安裝 finding-duplicate-functions 技能。當你需要一套可重複使用的方法,來判斷函式該不該合併、保留分開,或進一步調查時,它會很適合。
它和其他方法有什麼不同
它的關鍵差異在於兩階段工作流程:先抽出函式,再用 LLM 分析把它們依意圖分群。也就是說,這個技能要解決的是語意重複的判斷問題,不只是找出哪幾行相同。實務上的好處,是能更快從「這段程式看起來多餘」走到一份可供審查的整併方案。
如何使用 finding-duplicate-functions 技能
安裝並找到工作流程
請使用技能目錄中的 repository 安裝路徑:npx skills add obra/superpowers-lab --skill finding-duplicate-functions。安裝後,先從 skills/finding-duplicate-functions/SKILL.md 開始,再閱讀 skills/finding-duplicate-functions/scripts/ 裡的 helper scripts,因為真正的分析順序是由它們定義的。對 finding-duplicate-functions 來說,這些 scripts 比概述文字更重要。
這個技能需要什麼輸入
這個技能在你提供來源目錄和明確的審查目標時效果最好。好的輸入會說清楚程式碼範圍、分析原因,以及要排除哪些內容。例如:「掃描 packages/api/src,找出認證流程合併前重複的驗證 helper;忽略 test files,只回報高信心候選項目。」這比單純說「找重複」更好,因為它同時交代了範圍、意圖和輸出期待。
請先讀這些檔案
優先閱讀 scripts/extract-functions.sh、scripts/categorize-prompt.md、scripts/find-duplicates-prompt.md、scripts/prepare-category-analysis.sh 和 scripts/generate-report.sh。這些檔案展示了 finding-duplicate-functions 的實際使用方式:先抽出清單、再分類函式、按類別切分、執行語意比對,最後產出報告。如果你只打算先看一個檔案,就先讀 SKILL.md 和 scripts/extract-functions.sh,這樣才能理解輸入格式與排除條件。
會影響結果的工作流程技巧
把分類步驟當成過濾器,不要把它當成事後補充。當類別彼此一致,而且每個類別裡有足夠多函式可比對時,這個技能的準確度會更高,因為重複檢測是按類別進行的。預設排除 tests 通常適合用在 production cleanup,但如果你的審查目標是共用的 test utilities 或 fixture helpers,就應該把它們納入。生成的報告應該當成人工審查的候選清單,而不是自動重構計畫。
finding-duplicate-functions 技能 FAQ
這比一般 prompt 更好嗎?
是的,當你想要的是一套可重現的 workflow,用來找出 duplicate-function 的意圖,而不是一次性的腦力激盪答案時,它會更好。一般 prompt 可能會漏掉範圍控制、檔案選擇和信心門檻。finding-duplicate-functions 技能則提供了更容易在 code review 中重複使用的流程與輸出結構。
它會取代語法重複工具嗎?
不會,它是互補的。語法工具負責找出複製的程式碼;這個技能則能找出即使實作不同、語意仍然相近的函式。如果你的程式庫已經有完全複製的問題,應該先處理那些,這樣語意比對就能更專注。
這對初學者友善嗎?
如果你能把它指向一棵 source tree,並說清楚要審查什麼,它就算對初學者也算友善。初學者最需要知道的是,duplicate detection 是按類別進行,並且很依賴良好的輸入邊界。如果你不確定,先從一個 package 或一個功能區域開始,不要一開始就掃整個 repository。
什麼情況下不該用它?
當你需要的是廣泛的架構建議、一次性的 bug 修復,或整個程式碼庫的概覽時,就不適合用它。若你的 repository 大多不是 JS/TS 程式碼,也不適合,因為抽取 script 是以 JavaScript 和 TypeScript 的函式模式為主。如果你的目標只是找完全相同的拷貝,單純的 copy-paste detector 就已經足夠。
如何改進 finding-duplicate-functions 技能
縮小範圍,並把決策目標說得更清楚
最大的品質提升,來自於縮小審查範圍,並明確說出你要採取的動作。不要問「全部重複項目」,而是問「src/utils 裡可能的整併點,偏向高信心合併」。這會讓 finding-duplicate-functions 的使用效果更好,因為模型可以比較那些真的在彼此競爭的函式。
提供適當的對照案例
如果你已經懷疑某幾組函式有關聯,就把它們直接放進 prompt,並註明它們可能差在哪裡。例如:「比較 parseUserInput、normalizeInput 和 sanitizeInput;它們可能有重疊,但其中一個處理 HTML escaping。」這能幫助技能區分真正的 duplicates 和只是共享詞彙、實際用途卻不同的鄰近 helper。
留意常見失誤模式
最常見的失誤是過度分組:名稱相似但 business rules 不同的函式被過早合併。第二種是分得太細:只是在參數形狀或命名上不同的小 wrapper,被當成彼此獨立的函式。這兩種情況都應該補充 inputs、outputs 和預期行為的背景,讓審查判斷的是意圖,而不只是表面相似度。
從報告回到重構,再進行下一輪
第一次執行後,先用報告挑一個類別,手動核對 source code 中信心最高的群組。如果某個群組仍然模糊,就縮緊類別範圍,或用更好的 context lines 和更清楚的建議門檻重新執行。最好的 finding-duplicate-functions guide 是反覆迭代的:先用初始輸出縮小範圍,再針對下一段程式碼重新跑一次。
