在 Visual Studio Code 中使用 Rust
Rust 是一門強大的程式語言,常用於對效能和正確性有高要求的系統程式設計。如果你是 Rust 新手並想了解更多,《Rust 程式設計語言》這本線上書籍是一個很好的起點。本主題將詳細介紹如何在 Visual Studio Code 中透過 rust-analyzer 擴充套件來配置和使用 Rust。
VS Code 應用市場中還有另一個流行的 Rust 擴充套件(擴充套件 ID:rust-lang.rust),但該擴充套件已被棄用,rust-analyzer 是 rust-lang.org 官方推薦的 VS Code Rust 擴充套件。
安裝
1. 安裝 Rust
首先,你需要在你的機器上安裝 Rust 工具集。Rust 透過 rustup 安裝程式進行安裝,它支援在 Windows、macOS 和 Linux 上安裝。請遵循適合你平臺的 rustup 安裝指南,並注意安裝構建和執行 Rust 程式所需的任何額外工具。
與在機器上安裝任何新工具集一樣,你需要重啟終端/命令提示符和 VS Code 例項,以便在你平臺的 PATH 變數中使用更新後的工具集路徑。
2. 安裝 rust-analyzer 擴充套件
你可以在 VS Code 內部透過擴充套件檢視 (⇧⌘X (Windows、Linux Ctrl+Shift+X)) 找到並安裝 rust-analyzer 擴充套件,搜尋“rust-analyzer”即可。你應該安裝**釋出版本 (Release Version)**。
我們將在本主題中討論 rust-analyzer 的許多功能,但你也可以參考該擴充套件的文件:https://rust-analyzer.github.io。
檢查你的安裝
安裝 Rust 後,你可以透過開啟一個新的終端/命令提示符並輸入以下命令來檢查一切是否安裝正確:
rustc --version
該命令將輸出 Rust 編譯器的版本。如果你想了解更多細節,可以新增 --verbose
引數。如果遇到問題,可以查閱 Rust 安裝指南。
你可以透過執行以下命令將你的 Rust 安裝更新到最新版本:
rustup update
Rust 每 6 週會釋出一個新的穩定版本,所以這是一個好習慣。
本地 Rust 文件
當你安裝 Rust 時,完整的 Rust 文件集也會本地安裝到你的機器上,你可以透過輸入 rustup doc
來檢視。Rust 文件,包括《Rust 程式設計語言》和《Cargo 之書》,將在你的本地瀏覽器中開啟,這樣你就可以在離線時繼續你的 Rust 之旅。
Hello World
Cargo
當你使用 rustup 安裝 Rust 時,工具集包括 rustc 編譯器、rustfmt 原始碼格式化工具和 clippy Rust linter。你還會得到 Cargo,即 Rust 的包管理器,用於幫助下載 Rust 依賴、構建和執行 Rust 程式。你會發現,在 Rust 開發中,幾乎所有事情都會用到 cargo
。
Cargo new
建立你的第一個 Rust 程式的一個好方法是使用 Cargo 來搭建一個新專案,輸入 cargo new
即可。這將建立一個簡單的 Hello World 程式以及一個預設的 Cargo.toml
依賴檔案。你需要將希望建立專案的資料夾路徑傳遞給 cargo new
。
讓我們來建立 Hello World。導航到一個你想建立專案的資料夾,然後輸入:
cargo new hello_world
要在 VS Code 中開啟你的新專案,請進入新資料夾並透過 code .
啟動 VS Code。
cd hello_world
code .
由於你是作者,請為新資料夾啟用工作區信任。你可以透過勾選**信任父資料夾 'my_projects' 中所有檔案的作者**選項,為你整個專案資料夾的父目錄啟用工作區信任,以避免在建立新專案時被提示。
cargo new
建立了一個簡單的 Hello World 專案,其中包含一個 main.rs
原始碼檔案和一個 Cargo.toml
Cargo 清單檔案。
src\
main.rs
.gitignore
Cargo.toml
main.rs
包含程式的入口函式 main()
,並使用 println!
將“Hello, world!”列印到控制檯。
fn main() {
println!("Hello, world!");
}
這個簡單的 Hello World 程式沒有任何依賴項,但你可以將 Rust 包(crate)的引用新增到 [dependencies]
下。
Cargo build
Cargo 可用於構建你的 Rust 專案。開啟一個新的 VS Code 整合終端 (⌃⇧` (Windows、Linux Ctrl+Shift+`)) 並輸入 cargo build
。
cargo build
現在你將擁有一個 target\debug
資料夾,其中包含構建輸出,包括一個名為 hello_world.exe
的可執行檔案。
執行 Hello World
Cargo 也可以透過 cargo run
來執行你的 Rust 專案。
cargo run
你也可以在終端中輸入 .\target\debug\hello_world
來手動執行 hello_world.exe
。
IntelliSense
智慧感知 (IntelliSense) 功能由 Rust 語言伺服器 rust-analyzer 提供,它能提供詳細的程式碼資訊和智慧建議。
當你第一次開啟 Rust 專案時,你可以在狀態列的左下角看到 rust-analyzer 的進度。你需要等到 rust-analyzer 完全分析完你的專案,才能獲得語言伺服器的全部功能。
內聯提示
你可能首先注意到的事情之一是 rust-analyzer 提供了內聯提示,以淺色文字在編輯器中顯示推斷的型別、返回值和命名引數。
雖然內聯提示有助於理解你的程式碼,但你也可以透過**編輯器 > 內聯提示: 已啟用 (Editor > Inlay Hints: Enabled)** 設定 (editor.inlayHints.enabled) 來配置該功能。
懸停資訊
將滑鼠懸停在任何變數、函式、型別或關鍵字上,都會顯示該項的資訊,如文件、簽名等。你還可以跳轉到你自己程式碼或標準 Rust 庫中的型別定義。
自動補全
當你在 Rust 檔案中輸入時,智慧感知會為你提供建議的補全和引數提示。
使用 ⌃Space (Windows、Linux Ctrl+Space) 手動觸發建議。
語義語法高亮
由於 rust-analyzer 對專案原始碼有深入的理解,它能夠使用語義語法高亮和樣式。例如,你可能已經注意到可變變數在編輯器中帶有下劃線。
能夠快速分辨哪些 Rust 變數是可變的,可以幫助你理解原始碼,但你也可以透過 VS Code 的 editor.semanticTokenColorCustomizations 設定在你的使用者設定中更改樣式。
在 settings.json
中,你需要新增:
{
"editor.semanticTokenColorCustomizations": {
"rules": {
"*.mutable": {
"fontStyle": "", // set to empty string to disable underline, which is the default
},
}
},
}
你可以在 rust-analyzer 文件的編輯器功能部分了解更多關於 rust-analyzer 的語義語法自定義。
程式碼導航
程式碼導航功能可在編輯器的上下文選單中找到。
- 轉到定義 (Go to Definition) F12 - 轉到型別定義的原始碼。
- 速覽定義 (Peek Definition) ⌥F12 (Windows Alt+F12, Linux Ctrl+Shift+F10) - 彈出一個包含型別定義的速覽視窗。
- 轉到引用 (Go to References) ⇧F12 (Windows、Linux Shift+F12) - 顯示該型別的所有引用。
- 顯示呼叫層級 (Show Call Hierarchy) ⇧⌥H (Windows、Linux Shift+Alt+H) - 顯示某個函式的所有呼叫來源或呼叫目標。
您可以透過命令面板 (⇧⌘P (Windows、Linux 為 Ctrl+Shift+P)) 中的轉到符號命令來進行符號搜尋導航。
- 轉到檔案中的符號 - ⇧⌘O (Windows、Linux Ctrl+Shift+O)
- 轉到工作區中的符號 - ⌘T (Windows、Linux Ctrl+T)
程式碼檢查
Rust 工具集包含由 rustc 和 clippy 提供的程式碼檢查(linting)功能,用於檢測原始碼中的問題。
預設啟用的 rustc linter 會檢測基本的 Rust 錯誤,但你可以使用 clippy 來獲得更多的檢查。要在 rust-analyzer 中啟用 clippy 整合,請將 **Rust-analyzer > Check: Command** (rust-analyzer.check.command
) 設定更改為 clippy
,而不是預設的 check
。現在,當你儲存檔案時,rust-analyzer 擴充套件將執行 cargo clippy
,並在編輯器和問題檢視中直接顯示 clippy 的警告和錯誤。
快速修復
當 linter 在你的原始碼中發現錯誤和警告時,rust-analyzer 通常會提供建議的快速修復(也稱為程式碼操作),這些修復可透過編輯器中的燈泡懸停提示獲得。你可以透過 ⌘. (Windows、Linux Ctrl+.) 快速開啟可用的快速修復。
此外,程式碼操作小元件:包含附近的快速修復 (editor.codeActionWidget.includeNearbyQuickFixes) 是一個預設啟用的設定,它會從 ⌘. (Windows、Linux 為 Ctrl+.) (命令 ID editor.action.quickFix
) 啟用一行中最近的快速修復,無論您的游標在該行的哪個位置。
該命令會突出顯示將透過快速修復進行重構或修復的原始碼。普通程式碼操作和非修復重構仍可在游標位置啟用。
重構
由於 rust-analyzer 對你的原始碼有語義上的理解,它還能在你的所有 Rust 檔案中提供智慧重新命名。將游標放在一個變數上,從上下文選單、命令面板或透過 F2 選擇**重新命名符號 (Rename Symbol)**。
rust-analyzer 擴充套件還支援其他程式碼重構和程式碼生成,該擴充套件稱之為輔助功能 (Assists)。
以下是一些可用的重構:
- 將 if 語句轉換為帶守衛的返回
- 內聯變數
- 提取函式
- 新增返回型別
- 新增匯入
格式化
Rust 工具集包含一個格式化工具 rustfmt,它可以格式化你的原始碼以符合 Rust 的約定。你可以使用 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 格式化你的 Rust 檔案,或者從**命令面板**或編輯器的上下文選單中執行**格式化文件 (Format Document)**命令。
你還可以選擇在每次儲存(**編輯器: 儲存時格式化 (Editor: Format On Save)**)或貼上(**貼上時格式化 (Format On Paste)**)時執行格式化程式,以便在你工作時自動保持 Rust 程式碼的正確格式。
除錯
rust-analyzer 擴充套件支援在 VS Code 內部除錯 Rust。
安裝除錯支援
要開始除錯,你首先需要安裝兩個帶除錯支援的語言擴充套件之一:
- Microsoft C++ (ms-vscode.cpptools) – *在 Windows 上*
- CodeLLDB (vadimcn.vscode-lldb) – *在 macOS/Linux 上*
如果你忘記安裝這些擴充套件之一,當你嘗試啟動除錯會話時,rust-analyzer 會顯示一個通知,其中包含指向 VS Code 應用市場的連結。
使用 Rust Analyzer: Debug
rust-analyzer 擴充套件透過命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 中可用的 **Rust Analyzer: Debug** 命令以及編輯器中的 **Run|Debug** CodeLens 提供了基本的除錯支援。
讓我們來除錯我們之前建立的 Hello World 程式。首先,我們將在 main.rs
中設定一個斷點。
-
你需要啟用 **Debug: Allow Breakpoints Everywhere** 設定,你可以在設定編輯器 (⌘, (Windows、Linux Ctrl+,)) 中透過搜尋“everywhere”找到它。
-
開啟
main.rs
並點選編輯器左側的邊欄,在println!
行上設定一個斷點。它應該顯示為一個紅點。 -
要開始除錯,請使用 **Rust Analyzer: Debug** 命令或選擇
main()
上方的 **Debug** CodeLens。
後續步驟
這是一個簡要概述,展示了 VS Code 中 rust-analyzer 擴充套件的功能。有關更多資訊,請參閱 Rust Analyzer 擴充套件使用者手冊中提供的詳細資訊,包括如何調整特定的VS Code 編輯器配置。
要了解 rust-analyzer 擴充套件的最新功能/錯誤修復,請檢視 更新日誌 (CHANGELOG)。你還可以透過安裝擴充套件檢視**安裝**下拉選單中提供的 rust-analyzer **預釋出版本 (Pre-Release Version)** 來試用新功能和修復。
如果你有任何問題或功能請求,請隨時在 rust-analyzer 擴充套件的 GitHub 倉庫中提交。
如果您想了解更多關於 VS Code 的資訊,請嘗試以下主題:
常見問題
連結器錯誤
如果你在嘗試構建 Rust 程式時看到諸如 **“error: linker `link.exe` not found”**之類的連結器錯誤,你可能缺少必要的 C/C++ 工具集。根據你的平臺,你需要安裝一個帶有 C/C++ 連結器的工具集,以連結 Rust 編譯器的輸出。
Windows
在 Windows 上,你還需要安裝 Microsoft C++ 生成工具才能獲得 C/C++ 連結器 link.exe
。請確保在執行 Visual Studio 安裝程式時選擇**使用 C++ 的桌面開發**。
只要你擁有有效的 Visual Studio 許可證(Community、Pro 或 Enterprise),就可以將 Visual Studio 生成工具中的 C++ 工具集與 Visual Studio Code 一起使用,來編譯、構建和驗證任何程式碼庫。
macOS
你可能需要透過在終端中執行 xcode-select --install
來安裝 XCode 工具集。
Linux
你可能需要透過 build-essential
包來安裝 GCC 工具集,在終端中執行 sudo apt-get install build-essential
即可。
有關更多故障排除建議,請參閱 Rust 安裝指南。