讓 AI 真正「讀懂」程式碼:LSP 與 Claude Code 的進化革命
讓 AI 真正「讀懂」程式碼:LSP 與 Claude Code 的進化革命
還記得以前用 AI 寫程式的痛苦嗎?
你丟給 AI 一段程式碼,請它幫忙重構。它寫得頭頭是道,變數命名漂亮,邏輯看似完美。但當你興高采烈地把程式碼貼回編輯器——滿江紅。
「嘿!這個函式 get_user_data_v2 根本不存在啊!」你在心裡吶喊。
AI 委屈地回覆:「抱歉,我以為你有定義這個函式。」
這就是傳統 AI 寫程式的致命傷:它們是在「猜」字,而不是在「懂」Code。 它們把程式碼當成普通文本在閱讀,卻無法像編譯器那樣理解程式碼之間的關聯。
直到 LSP (Language Server Protocol) 的出現,尤其是最近整合進 Claude Code (CLI) 的重大更新,這一切正在發生翻天覆地的改變。
什麼是 LSP?程式碼的「通用翻譯機」
LSP,全名 Language Server Protocol,是由微軟(Microsoft)為了 VS Code 開發的一套通訊協定。
在 LSP 出現之前,如果你想開發一個新的編輯器(比如 Sublime Text),並且希望它支援 Python、Java 和 Go,你需要為每一種語言單獨寫一套插件來處理語法高亮、自動補全和跳轉定義。這是一個可怕的 M x N 問題(M 個編輯器 x N 種語言)。
LSP 解決了這個問題。它把「語言智慧」從編輯器中抽離出來,變成一個獨立的伺服器(Server)。
- Language Server (後端):負責苦力活。它知道 Python 的語法,知道這個變數在哪裡定義的,知道這裡少了一個分號。
- Client (前端/編輯器):只負責顯示。VS Code、Vim、甚至現在的 Claude Code,都是 Client。
簡單來說,LSP 就是一個標準化的翻譯官。編輯器問:「使用者滑鼠停在這個變數上,這是什麼?」Language Server 回答:「這是一個字串,定義在第 30 行。」
為何 LSP 對 AI (Claude Code) 如此重要?
最近 Claude Code 的更新 (v2.0.74+) 引入了 LSP 支援,這不僅僅是一個功能更新,而是 AI 寫程式的思維升級。
1. 從「文本預測」進化到「語意理解」
以前的 Claude Code 就像一個記憶力超強但沒學過程式邏輯的打字員。它靠機率預測下一個字。 有了 LSP,Claude Code 獲得了「視力」。它能看到:
- Go to Definition (跳轉定義):當它想修改一個函式時,它能真正「跳」過去看原始碼,而不是瞎猜。
- Find References (尋找引用):當你要重構變數名稱時,它能找出專案中所有使用到這個變數的地方,確保改得乾淨俐落。
2. 消滅「幻覺 API」
這是開發者最有感的改變。
以前 AI 常會捏造不存在的函式庫方法(Hallucination)。現在,透過 LSP 的 Diagnostics (診斷) 功能,如果 Claude 寫了一行 import pandas as pdd,LSP 會立刻在背景告訴它:「嘿,你的環境裡沒有這個模組,或者你拼錯了。」
Claude 可以在把程式碼交給你之前,自我修正這些低級錯誤。
3. 即時的錯誤回饋
就像你在 VS Code 裡看到的紅色波浪線,現在 Claude Code 在生成程式碼的過程中,也能接收到這些錯誤訊號。這讓它變成了一個Headless IDE (無頭整合開發環境)——它不只是一個聊天機器人,而是一個沒有圖形介面、但在背景默默執行完整 IDE 功能的工程師。
實戰:在 Claude Code 中體驗 LSP
如果你是 Claude Code 的使用者,你會發現這種體驗是無縫的,但背後的運作邏輯完全不同。
場景:重構遺留代碼
以前的流程:
你:「請幫我把
user.id改成user.uuid。」 AI:「好的。」(然後它只改了當前檔案,漏掉了引用這個模組的其他三個檔案,導致你的專案跑不動。)
現在的流程 (With LSP):
你:「請幫我把
user.id改成user.uuid。」 Claude Code (內部思考):啟動 LSP... 查詢user.id的 Reference... 發現它被auth.ts和payment.ts引用... AI:「沒問題,我已經修改了models.ts,並同步更新了auth.ts和payment.ts中的引用。LSP 檢查通過,沒有型別錯誤。」
這就是差別。
給開發者的建議
- 擁抱 CLI 工具:現在的趨勢是 AI Agent 透過 CLI 直接操作你的檔案系統。Claude Code 支援
terminal-setup,能自動適應你的 Kitty、Alacritty 或 Zed 終端機設定,這不是巧合,而是為了讓 AI 更深地整合進你的開發環境。 - 理解你的工具鏈:LSP 雖然強大,但需要正確的配置。確保你的專案中有正確的
tsconfig.json(TypeScript) 或pyproject.toml(Python),這樣 LSP Server 才能正確啟動,餵給 AI 正確的資訊。 - OpenCode 的未來:雖然我們以 Claude Code 為例,但這個概念適用於所有未來的 "OpenCode" 類工具。任何想要達到「資深工程師」水準的 AI Agent,最終都必須整合 LSP。因為準確性遠比創造力更重要。
結論
LSP 是連線「人類自然語言」與「機器程式語言」的橋樑。對於 Claude Code 來說,LSP 就是它的「導盲犬」。它不再是在黑暗中摸索文字的規律,而是真正看見了程式碼的結構與脈絡。
下次當你發現 Claude 準確地修正了一個跨檔案的 Bug,請記得感謝背後那位默默工作的功臣——LSP。
[!tip] 技術小貼士 想檢查你的 Claude Code 是否啟用了 LSP 功能?試著問它:「你能幫我找出這個函式在專案中所有的引用位置嗎?」如果它能精確列出檔案與行號,而不只是進行文字搜尋,那就是 LSP 在發揮作用了!
本文最初發布於 HackMD @BASHCAT。
留言
張貼留言