Rust in Visual Studio Code
Rust 是一种强大的编程语言,常用于系统编程,其中性能和正确性是优先考虑的因素。如果您是 Rust 的新手,想了解更多信息,《Rust 程序设计语言》在线书籍是一个很好的入门资源。本文详细介绍了如何在 Visual Studio Code 中设置和使用 Rust,重点介绍 rust-analyzer 扩展。
VS Code Marketplace 中还有一个流行的 Rust 扩展(扩展 ID:rust-lang.rust),但该扩展已弃用,rust-lang.org 推荐的 VS Code Rust 扩展是 rust-analyzer。
安装
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 代码检查器。您还会获得 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 清单文件。
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
您也可以在终端中手动运行 hello_world.exe
,方法是键入 .\target\debug\hello_world
。
IntelliSense
IntelliSense 功能由 Rust 语言服务器 rust-analyzer 提供,它提供了详细的代码信息和智能建议。
当您首次打开一个 Rust 项目时,您可以在状态栏的左下角查看 rust-analyzer 的进度。您需要等待 rust-analyzer 完全审查完您的项目,才能获得语言服务器的全部强大功能。
内嵌提示
您可能会注意到的第一件事是 rust-analyzer 提供的内嵌提示,在编辑器中使用浅色文本显示推断的类型、返回值和命名参数。
虽然内嵌提示有助于理解您的代码,但您也可以在设置中通过编辑器 > 内嵌提示:启用设置(editor.inlayHints.enabled)配置此功能。
悬停信息
将鼠标悬停在任何变量、函数、类型或关键字上,都会为您提供有关该项的信息,例如文档、签名等。您还可以跳转到您自己的代码或标准 Rust 库中的类型定义。
自动补全
当您在 Rust 文件中键入时,IntelliSense 会为您提供建议的补全和参数提示。
使用 ⌃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) - 弹出一个 Peek 窗口,显示类型定义。
- 转到引用 ⇧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 提供的代码检查功能,用于检测源代码中的问题。
默认启用的 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
)激活行中最接近的快速修复,无论您的光标在该行的哪个位置。
该命令会突出显示将通过快速修复进行重构或修复的源代码。常规的代码操作和非修复重构仍然可以在光标位置激活。
重构
由于 rust-analyzer 对源代码的语义理解,它还可以在您的 Rust 文件之间提供智能重命名。将光标放在变量上,从上下文菜单、命令面板或通过 F2 选择重命名符号。
rust-analyzer 扩展还支持其他代码重构和代码生成,扩展将其称为辅助操作 (Assists)。
以下是一些可用的重构:
- 将 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:调试
rust-analyzer 扩展通过命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的Rust Analyzer:调试命令和编辑器中的运行|调试 CodeLens 提供基本调试支持。
让我们调试之前创建的 Hello World 程序。首先,我们将在 main.rs
中设置一个断点。
-
您需要启用设置调试:允许在任何地方设置断点,您可以在设置编辑器(⌘, (Windows, Linux Ctrl+,))中搜索“everywhere”找到该设置。
-
打开
main.rs
并在编辑器的左侧空白处单击,在println!
行上设置一个断点。它应该显示为一个红点。 -
要开始调试,请使用Rust Analyzer:调试命令或选择
main()
函数上方的调试 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”(错误:找不到链接器 link.exe),则可能缺少必要的 C/C++ 工具集。根据您的平台,您需要安装包含 C/C++ 链接器的工具集,以合并 Rust 编译器的输出。
Windows
在 Windows 上,您还需要安装 Microsoft C++ Build Tools 才能获取 C/C++ 链接器 link.exe
。请务必在运行 Visual Studio 安装程序时选择使用 C++ 的桌面开发。
您可以使用 Visual Studio Build Tools 中的 C++ 工具集以及 Visual Studio Code 来编译、构建和验证任何代码库,前提是您拥有有效的 Visual Studio 许可证(社区版、专业版或企业版)。
macOS
您可能需要通过在终端中运行 xcode-select --install
来安装 XCode 工具集。
Linux
您可能需要通过安装 build-essential
包来安装 GCC 工具集,方法是在终端中运行 sudo apt-get install build-essential
。
如需进一步的故障排除建议,请参阅 Rust 安装指南。