第37篇:LSP 診斷——程式碼語意檢查
Hermes 功能詳解第37篇:LSP。語言伺服器協定加持程式碼分析。
這篇講的是:Hermes Agent 如何像一位「隨隊醫生」一樣,在你改完程式碼後立刻幫你查出隱藏的「內傷」——也就是語法之外的邏輯錯誤、型別錯誤和拼寫錯誤。
為什麼需要「語意檢查」?
想像一下:你寫了一段中文,錯別字和標點錯誤(語法)很容易發現,但「把蘋果放進冰箱」和「把冰箱放進蘋果」這種邏輯問題,光靠眼睛可看不出來。程式碼也一樣——語法檢查只能發現「句子通不通」,而語意檢查能發現「意思對不對」。
Hermes 內建了 20 多種語言伺服器(比如 Python 的 Pyright、Go 的 gopls、Rust 的 rust-analyzer),它們像一群專業審稿人,在背景默默盯著你每次修改,然後告訴你:「你這裡少了個定義」「那裡型別對不上」。
第1步:確認你的專案在 Git 倉庫裡
LSP 只在 Git 工作區內生效。如果你的程式碼不在 Git 倉庫裡,這個功能就自動休眠——就像醫生只在醫院上班,不會跑到你家客廳來查房。
cd 你的專案目錄
git init # 如果還沒初始化倉庫
第2步:查看哪些語言已「配好醫生」
執行這條命令,看看哪些語言的伺服器已就緒:
hermes lsp status
它會列出每種語言的安裝狀態。沒裝的就用 hermes lsp install <語言id> 補上,比如:
hermes lsp install python # 安裝 Pyright
hermes lsp install go # 安裝 gopls
第3步:正常寫程式碼,剩下的交給 Hermes
每次你用 write_file 或 patch 儲存檔案時,Hermes 會自動:
- 先做語法檢查(微秒級,幾乎不耗時)
- 再請語言伺服器做語意檢查(可能需要幾秒)
- 只報告「這次修改新引入的問題」,老問題不重複打擾你
你會在回傳結果裡看到類似這樣的資訊:
{
"lint": {"status": "ok"},
"lsp_diagnostics": "ERROR [42:5] Cannot find name 'foo' (Pyright)"
}
lint 是語法通道,lsp_diagnostics 是語意通道——語法沒問題但語意有錯時,你會看到 lint: ok 加上一堆診斷資訊。
第4步:按需調整設定(可選)
預設設定對大多數人都夠用。如果你想讓 Python 檢查更嚴格,可以在 config.yaml 裡這樣設定:
lsp:
servers:
pyright:
initialization_options:
python:
analysis:
typeCheckingMode: "strict"
改完設定記得重啟服務:hermes lsp restart
常見問題
- 沒裝伺服器會怎樣? 自動降級為純語法檢查,不會報錯。
- 伺服器啟動慢? 首次啟動需要 1-10 秒,之後會常駐背景。
- PowerShell 使用者? 它比較特殊,需要手動下載模組包並設定路徑,詳見文件。
小結
LSP 診斷就像給程式碼加了一道「語意安檢門」,讓你在提交程式碼前就發現隱藏的「內傷」。語法檢查保底,語意檢查提升品質,兩者配合,寫程式碼更安心。
下篇預告:第38篇我們將聊聊 Hermes 的「記憶管理」——它如何記住你的專案偏好,越用越順手。敬請期待!
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/features/lsp