在 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 程序没有任何依赖,但你可以在 [dependencies]
下添加 Rust 包(crate)的引用。
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
。
智能感知
智能感知功能由 Rust 语言服务器 rust-analyzer 提供,它能提供详细的代码信息和智能建议。
当你第一次打开一个 Rust 项目时,你可以在状态栏的左下角观察 rust-analyzer 的进度。你需要等到 rust-analyzer 完全分析完你的项目,才能获得语言服务器的全部功能。
内联提示
你可能首先注意到的事情之一是 rust-analyzer 提供了内联提示,在编辑器中以浅色文本显示推断的类型、返回值和命名参数。
虽然内联提示有助于理解你的代码,但你也可以通过 **编辑器 > 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 的语义化语法自定义。
代码导航
代码导航功能在编辑器的上下文菜单中可用。
- 转到定义 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 提供的 Linting 功能,用于检测源代码中的问题。
rustc linter 默认启用,可以检测基本的 Rust 错误,但你可以使用 clippy 来获得更多的 lints。要在 rust-analyzer 中启用 clippy 集成,请将 **Rust-analyzer > Check: Command** (`rust-analyzer.check.command`) 设置更改为 `clippy`,而不是默认的 `check`。现在,当你保存文件时,rust-analyzer 扩展将运行 `cargo clippy`,并在编辑器和“问题”视图中直接显示 clippy 的警告和错误。
快速修复
当 linter 在你的源代码中发现错误和警告时,rust-analyzer 通常可以提供建议的快速修复(也称为代码操作),这些修复可通过编辑器中的灯泡悬停提示获得。你可以通过 ⌘. (Windows、Linux Ctrl+.) 快速打开可用的快速修复。
此外,**代码操作小组件:包括附近的快速修复 (Code Action Widget: Include Nearby Quick Fixes)** (editor.codeActionWidget.includeNearbyQuickFixes) 是一个默认启用的设置,它将从 ⌘. (Windows、Linux Ctrl+.) (命令 ID `editor.action.quickFix`) 激活一行中最近的快速修复,无论你的光标在该行的哪个位置。
该命令会突出显示将通过快速修复进行重构或修复的源代码。普通代码操作和非修复重构仍可在光标位置激活。
重构
由于 rust-analyzer 对你的源代码有语义理解,它还可以在你的所有 Rust 文件中提供智能重命名。将光标放在一个变量上,从上下文菜单、命令面板或通过 F2 选择**重命名符号**。
rust-analyzer 扩展还支持其他代码重构和代码生成,该扩展称之为辅助功能 (Assists)。
以下是几个可用的重构功能:
- 将 if 语句转换为带守卫的返回
- 内联变量
- 提取函数
- 添加返回类型
- 添加导入
格式化
Rust 工具集包含一个格式化工具 rustfmt,它可以格式化你的源代码以符合 Rust 的约定。你可以使用 ⇧⌥F (Windows Shift+Alt+F, Linux Ctrl+Shift+I) 来格式化你的 Rust 文件,或者从**命令面板**或编辑器的上下文菜单中运行**格式化文档**命令。
你还可以选择在每次保存(**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** 命令以及编辑器中的**运行|调试** 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 **预发布版**来试用新功能和修复。
如果你有任何问题或功能请求,请随时在 rust-analyzer 扩展的 GitHub 仓库中提交。
如果您想了解更多关于 VS Code 的信息,请尝试以下主题:
常见问题
链接器错误
如果你在尝试构建 Rust 程序时看到诸如 **"error: linker `link.exe` not found"** 之类的链接器错误,你可能缺少必要的 C/C++ 工具集。根据你的平台,你需要安装一个带有 C/C++ 链接器的工具集来合并 Rust 编译器的输出。
Windows
在 Windows 上,你还需要安装微软 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
你可能需要通过在终端中运行 sudo apt-get install build-essential
来安装 GCC 工具集(通过 `build-essential` 包)。
有关进一步的故障排除建议,请参阅 Rust 安装指南。