發現一個讓程式碼自動優化的神奇技巧,同事看完直接跪了
-
剛剛在重構舊專案時發現的,原本以為只是個都市傳說,實測後直接嚇到我。
背景:手上有個 5 萬行的 legacy codebase,技術債堆得像山一樣高,每次改動都得戰戰兢兢。
然後我在 GitHub 上看到一個被埋沒的討論串,講的是用 AST (抽象語法樹) + LLM 的混合方案 來做自動化重構。
具體做法:
- 用
babel-parser或ts-morph把代碼解析成 AST - 寫訪問者模式提取出「純邏輯」vs「副作用」的節點
- 把純邏輯部分丟給 LLM,提示詞大概是:「這段代碼只做資料轉換,請用最簡潔的函數式寫法重寫,保持輸出輸入一致」
- LLM 吐出優化版本,再用 AST 把它塞回原位置
- 跑測試套件驗證行為一致
實測結果:
- 一個 200 行的
switch-case地獄,變成 15 行的Map+ 策略模式 - 迴圈裡的巢狀
if-else直接被拉平成guard clause串聯 - 型別推斷從
any變成精確的 generic constraints - 測試覆蓋率從 34% 衝到 87%,且零 regression
同事 code review 時的反應:「這...這是不是 AI 寫的?」「還是你偷偷重寫了三週?」
最誇張的是:這套流程現在封裝成 CLI 工具,跑一次
npm run auto-refactor就能處理整個專案。CI/CD 管線直接接上,每次 PR 自動跑一遍,不好合就不合。有沒有人想看核心腳本?我整理成 gist 可以分享。
補充:這不是讓 AI 幫你寫代碼,而是用 AST 做「結構性保證」+ LLM 做「局部優化」。兩者分工不同,別混為一談。
#程式設計 #重構 #AST #LLM #技術分享
- 用
-
思路不错!
很快 模型就会学习吸收了. -
我很久没有写
一個 200 行的 switch-case 地獄,
迴圈裡的巢狀 if-else在20年前中学毕业,我还记得会这样写,然而,现在搞不定,还会偶尔偷鸡用goto
-
整理好了,核心腳本在這:
https://gist.github.com/Wang200935/dbffd7104c9170fca494f7ee7bedc865AST 用 babel-parser 解析,visitor pattern 萃取純邏輯函式(無副作用的才丢 LLM),重構完用 AST 替換回原位再跑測試。TS 可以把 babel-parser 換成 ts-morph,流程一樣。
-
思路不错!
很快 模型就会学习吸收了. -
我很久没有写
一個 200 行的 switch-case 地獄,
迴圈裡的巢狀 if-else在20年前中学毕业,我还记得会这样写,然而,现在搞不定,还会偶尔偷鸡用goto
-
整理好了,核心腳本在這:
https://gist.github.com/Wang200935/dbffd7104c9170fca494f7ee7bedc865AST 用 babel-parser 解析,visitor pattern 萃取純邏輯函式(無副作用的才丢 LLM),重構完用 AST 替換回原位再跑測試。TS 可以把 babel-parser 換成 ts-morph,流程一樣。
-
思路不错!
很快 模型就会学习吸收了. -
我很久没有写
一個 200 行的 switch-case 地獄,
迴圈裡的巢狀 if-else在20年前中学毕业,我还记得会这样写,然而,现在搞不定,还会偶尔偷鸡用goto
