🚀 在 VS Code 中

Rust 於 Visual Studio Code

Rust 是一種功能強大的程式設計語言,常用於效能和正確性為首要考量的系統程式設計。如果您是 Rust 新手並想深入瞭解,《Rust 程式設計語言》線上書籍是絕佳的起點。本主題詳細介紹如何在 Visual Studio Code 中設定和使用 Rust,並搭配 rust-analyzer 擴充功能。

Rust extension banner

注意:在 VS Code Marketplace 中還有另一個熱門的 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'。您應該安裝發行版本

rust-analyzer extension in the Extensions view

我們將在本主題中討論 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 Book》,將在您的本機瀏覽器中開啟,讓您可以在離線時繼續您的 Rust 旅程。

Hello World

Cargo

當您使用 rustup 安裝 Rust 時,工具組會包含 rustc 編譯器、rustfmt 原始碼格式器和 clippy Rust linter。您也會取得 Rust 套件管理器 Cargo,以協助下載 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 manifest 檔案。

src\
    main.rs
.gitignore
Cargo.toml

main.rs 具有程式的進入點函式 main(),並使用 println! 將 "Hello, world!" 列印到主控台。

fn main() {
    println!("Hello, world!");
}

這個簡單的 Hello World 程式沒有任何相依性,但您會在 [dependencies] 下新增 Rust 套件 (crate) 參考。

Cargo build

Cargo 可用於建置您的 Rust 專案。開啟新的 VS Code 整合式終端機 (⌃⇧` (Windows、Linux Ctrl+Shift+`)) 並輸入 cargo build

cargo build

Cargo build output in the integrated terminal

您現在將擁有 target\debug 資料夾,其中包含建置輸出,包括名為 hello_world.exe 的可執行檔。

執行 Hello World

Cargo 也可用於透過 cargo run 執行您的 Rust 專案。

cargo run

您也可以在終端機中手動執行 hello_world.exe,方法是輸入 .\target\debug\hello_world

Manually running hello_world.exe output in the integrated terminal

IntelliSense

IntelliSense 功能是由 Rust 語言伺服器 rust-analyzer 提供,它提供詳細的程式碼資訊和智慧建議。

當您第一次開啟 Rust 專案時,您可以觀看 rust-analyzer 在狀態列左下角的進度。您需要等到 rust-analyzer 完全檢閱您的專案,才能獲得語言伺服器的完整功能。

rust-analyzer in progress status in the VS Code Status bar

內嵌提示

您可能會注意到的第一件事是 rust-analyzer 提供內嵌提示,以在編輯器中以淺色文字顯示推斷的類型、傳回值、具名參數。

Rust program with inlay hints displayed

雖然內嵌提示對於瞭解您的程式碼很有幫助,但您也可以透過編輯器 > 內嵌提示:已啟用設定 (editor.inlayHints.enabled) 來設定此功能。

滑鼠停留資訊

將滑鼠停留在任何變數、函式、類型或關鍵字上,將會提供有關該項目的資訊,例如文件、簽章等。您也可以跳到您自己的程式碼或標準 Rust 程式庫中的類型定義。

Hover information for the Rust String type

自動完成

當您在 Rust 檔案中輸入時,IntelliSense 會為您提供建議的完成項目和參數提示。

Smart completion for Rust String member

提示:使用 ⌃Space (Windows、Linux Ctrl+Space) 手動觸發建議。

語意語法醒目提示

rust-analyzer 能夠使用語意語法醒目提示和樣式,因為它對專案原始碼有豐富的理解。例如,您可能已經注意到可變變數在編輯器中已加上底線。

Mutable variable underline in the editor

能夠快速判斷哪些 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 的語意語法自訂。

程式碼導覽

程式碼導覽功能可在編輯器中的內容功能表中使用。

  • 移至定義 F12 - 移至類型定義的原始碼。
  • 查看定義 ⌥F12 (Windows Alt+F12、Linux Ctrl+Shift+F10) - 顯示包含類型定義的「查看」視窗。
  • 移至參考 ⇧F12 (Windows、Linux Shift+F12) - 顯示類型的所有參考。
  • 顯示呼叫階層 ⇧⌥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 提供,用於偵測原始碼中的問題。

linter warning about an unused variable

預設啟用的 rustc 程式碼檢查器會偵測基本的 Rust 錯誤,但您可以使用 clippy 來取得更多程式碼檢查。若要在 rust-analyzer 中啟用 clippy 整合,請將Rust-analyzer > 檢查:命令 (rust-analyzer.check.command) 設定變更為 clippy 而非預設的 check。現在,當您儲存檔案時,rust-analyzer 擴充功能將會執行 cargo clippy,並直接在編輯器和「問題」檢視中顯示 clippy 警告和錯誤。

快速修正

當程式碼檢查器在您的原始碼中發現錯誤和警告時,rust-analyzer 通常可以提供建議的「快速修正」(也稱為「程式碼動作」),這些修正可透過編輯器中的燈泡懸停取得。您可以透過 ⌘. (Windows、Linux Ctrl+.) 快速開啟可用的「快速修正」。

此外,程式碼動作小工具:包含鄰近的快速修正 (editor.codeActionWidget.includeNearbyQuickFixes) 是一項預設啟用的設定,它將從 ⌘. (Windows、Linux Ctrl+.) (命令 ID editor.action.quickFix) 啟動一行中最接近的「快速修正」,無論您的游標在該行中的哪個位置。

此命令會醒目提示將使用「快速修正」重構或修正的原始碼。一般的「程式碼動作」和非修正重構仍然可以在游標位置啟動。

Quick Fixes for greeting unused boolean variable

重構

由於 rust-analyzer 對您的原始碼具有語意理解,因此它也可以在您的 Rust 檔案中提供智慧重新命名。將游標放在變數上,從內容功能表、「命令選擇區」或透過 F2 選取重新命名符號

rust-analyzer 擴充功能也支援其他程式碼重構和程式碼產生,擴充功能將其稱為 輔助 (程式碼動作)

以下僅列出一些可用的重構

  • 將 if 陳述式轉換為受保護的傳回
  • 內嵌變數
  • 擷取函式
  • 新增傳回類型
  • 新增匯入

格式化

Rust 工具組包含格式器 rustfmt,它可以格式化您的原始碼以符合 Rust 慣例。您可以使用 ⇧⌥F (Windows Shift+Alt+F、Linux Ctrl+Shift+I) 或從命令選擇區或編輯器中的內容功能表執行格式化文件命令來格式化您的 Rust 檔案。

您也可以選擇在每次儲存 (編輯器:儲存時格式化) 或貼上 (貼上時格式化) 時執行格式器,以在您工作時自動保持 Rust 程式碼的正確格式。

偵錯

rust-analyzer 擴充功能支援從 VS Code 內偵錯 Rust。

安裝偵錯支援

若要開始偵錯,您首先需要安裝兩個具有偵錯支援的語言擴充功能之一

  • Microsoft C++ (ms-vscode.cpptools) – 在 Windows 上
  • CodeLLDB (vadimcn.vscode-lldb) – 在 macOS/Linux 上

如果您忘記安裝其中一個擴充功能,當您嘗試啟動偵錯工作階段時,rust-analyzer 將會提供通知,其中包含 VS Code Marketplace 的連結。

rust-analyzer notification to install a debugging extension

使用 Rust Analyzer:偵錯

rust-analyzer 擴充功能透過命令選擇區 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 和編輯器中的 執行|偵錯 CodeLens 中提供的 Rust Analyzer:偵錯 命令,提供基本偵錯支援。

讓我們偵錯我們稍早建立的 Hello World 程式。首先,我們將在 main.rs 中設定中斷點。

  1. 您需要啟用偵錯:允許任何位置的中斷點設定,您可以在設定編輯器 (⌘, (Windows、Linux Ctrl+,)) 中搜尋 'everywhere' 來找到它。

    Debug: Allow Breakpoints Everywhere in the Settings editor

  2. 開啟 main.rs 並按一下編輯器中的左側邊界,在 println! 行設定中斷點。它應該顯示為紅色點。

    Red breakpoint dot in the left gutter of the editor

  3. 若要開始偵錯,請使用 Rust Analyzer:偵錯 命令,或選取 main() 附近的 偵錯 CodeLens。

    Debug session stopped at breakpoint

後續步驟

這是一個簡短的概觀,展示 VS Code 內 rust-analyzer 擴充功能的功能。如需更多資訊,請參閱 Rust Analyzer 擴充功能使用者手冊中提供的詳細資訊,包括如何調整特定的 VS Code 編輯器 設定。

若要隨時掌握 rust-analyzer 擴充功能的最新功能/錯誤修正,請參閱 CHANGELOG。您也可以透過安裝「擴充功能」檢視安裝下拉式選單中提供的 rust-analyzer 搶先體驗版本來試用新功能和修正。

如果您有任何問題或功能要求,請隨時在 rust-analyzer 擴充功能 GitHub 存放庫 中記錄。

如果您想深入瞭解 VS Code,請試試這些主題

常見問題

連結器錯誤

如果您在嘗試建置 Rust 程式時看到連結器錯誤,例如 "error: linker link.exe not found",則您可能缺少必要的 C/C++ 工具組。根據您的平台,您將需要安裝具有 C/C++ 連結器的工具組,以組合 Rust 編譯器輸出。

Windows

在 Windows 上,您還需要安裝 Microsoft C++ Build Tools 才能取得 C/C++ 連結器 link.exe。執行 Visual Studio 安裝程式時,請務必選取使用 C++ 的桌面開發

注意:只要您也擁有有效的 Visual Studio 授權 (Community、Pro 或 Enterprise),您就可以將 Visual Studio Build Tools 中的 C++ 工具組與 Visual Studio Code 搭配使用,以編譯、建置和驗證任何程式碼庫。

macOS

您可能需要在終端機中執行 xcode-select --install 來安裝 XCode 工具組。

Linux

您可能需要在終端機中執行 sudo apt-get install build-essential,透過 build-essential 套件安裝 GCC 工具組。

如需進一步的疑難排解建議,請參閱 Rust 安裝指南。