解決方法
- 首先提供一個解決辦法,其實比較粗暴。直接卸載 rust-analyzer 然后重新搜索安裝該擴展。可以恢復
分析
當我重新安裝了 rust-analyzer 之后,我看了開發機上有這樣一個進程 xxx/matklad.rust-analyze/rust-analyzer-mac
所以我猜測,應該是要想正常使用 rust-analyzer 擴展,機器上一定要將 server 端(也就是 rust-analyzer-mac)運行起來
因此,如果 rust-analyzer 突然沒法使用了,可以嘗試主動啟動 rust-analyzer-mac 程序,該可執行文件在 Mac 上位於 ~/Library/Application\ Support/Code/User/globalStorage/matklad.rust-analyzer
目錄下。因此只需在命令行執行命令 ~/Library/Application\ Support/Code/User/globalStorage/matklad.rust-analyzer/rust-analyzer-mac
如果你的系統不是 OSX,是 Win/Linux,對應的 server 程序文件路徑也在 rust-analyzer 官方文檔中有指出,可以查看官方文檔手冊。
試驗
為了驗證我的猜想,我先找到機器上運行着的 rust-analyzer-mac 進程,將其 kill 掉。我再去 vscode 上看看,Rust 相關的 ide 功能是否可用。
結果是符合預期,ide 功能無法繼續使用。說明 rust-analyzer-mac 是正常使用 Rust ide 功能的關鍵所在。
此時,我在主動去啟動 rust-analyzer-mac 程序。命令行輸出如下內容:
Error: ProtocolError("expected initialize request, got Err(RecvError)")
隨后,我再去試試 Rust ide 的功能,恢復正常。查看機器上的進程,rust-analyzer-mac 處於正在運行的狀態。別着急,這只是表面現象。
在后續的數次使用 vscode 編寫 Rust 代碼時, 發現主動啟動 rust-analyzer-mac 可執行程序,並不能幫助我正確地啟動 language server。
但是我發現,當我用 vscode 打開我的 Rust 倉庫時,使用 ps -A | grep analyzer
查看進程是否存在,如果沒有,我關掉當前的 vscode 窗口,重新打開那個 Rust 倉庫,會發現 language server 啟動了。
結論
如此看來,rust-analyzer-mac 程序是 rust-analyzer 工具使用的關鍵,一旦,無法正常使用
- 1.嘗試關掉 vscode 窗口,重新用 vscode 打開 Rust 倉庫。
- 2.可以嘗試自己去啟動 rust-analyzer-mac 程序。