讓 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.tspayment.ts 引用... AI:「沒問題,我已經修改了 models.ts,並同步更新了 auth.tspayment.ts 中的引用。LSP 檢查通過,沒有型別錯誤。」

這就是差別。

給開發者的建議

  1. 擁抱 CLI 工具:現在的趨勢是 AI Agent 透過 CLI 直接操作你的檔案系統。Claude Code 支援 terminal-setup,能自動適應你的 Kitty、Alacritty 或 Zed 終端機設定,這不是巧合,而是為了讓 AI 更深地整合進你的開發環境。
  2. 理解你的工具鏈:LSP 雖然強大,但需要正確的配置。確保你的專案中有正確的 tsconfig.json (TypeScript) 或 pyproject.toml (Python),這樣 LSP Server 才能正確啟動,餵給 AI 正確的資訊。
  3. OpenCode 的未來:雖然我們以 Claude Code 為例,但這個概念適用於所有未來的 "OpenCode" 類工具。任何想要達到「資深工程師」水準的 AI Agent,最終都必須整合 LSP。因為準確性遠比創造力更重要。

結論

LSP 是連線「人類自然語言」與「機器程式語言」的橋樑。對於 Claude Code 來說,LSP 就是它的「導盲犬」。它不再是在黑暗中摸索文字的規律,而是真正看見了程式碼的結構與脈絡。

下次當你發現 Claude 準確地修正了一個跨檔案的 Bug,請記得感謝背後那位默默工作的功臣——LSP。

[!tip] 技術小貼士 想檢查你的 Claude Code 是否啟用了 LSP 功能?試著問它:「你能幫我找出這個函式在專案中所有的引用位置嗎?」如果它能精確列出檔案與行號,而不只是進行文字搜尋,那就是 LSP 在發揮作用了!


本文最初發布於 HackMD @BASHCAT

留言

這個網誌中的熱門文章

Arduino 課本可能沒教的事(1)

SI4432 搭配Arduino

燒錄 Arduino mini Pro 燒錄