Visual Studio Code 中的 Rust
Rust 是一种强大的编程语言,常用于对性能和正确性要求很高的系统编程。如果您是 Rust 新手并想了解更多信息,《Rust 编程语言》在线书籍是一个很好的起点。本主题详细介绍了如何在 Visual Studio Code 中设置和使用 Rust,并结合 rust-analyzer 扩展。
注意: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”。您应该安装发布版本。
我们将在本主题中讨论 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 代码检查器。您还会获得 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
。
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) - 调出速览窗口,其中包含类型定义。
- 转到引用 ⇧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 市场的链接。
使用 Rust Analyzer: Debug
rust-analyzer 扩展通过命令面板(⇧⌘P (Windows、Linux Ctrl+Shift+P))和编辑器中的 Run|Debug CodeLens 提供的 Rust Analyzer: Debug 命令提供基本的调试支持。
让我们调试我们之前创建的 Hello World 程序。首先,我们将在 main.rs
中设置一个断点。
-
您需要启用设置调试:允许在任何地方设置断点,您可以在设置编辑器(⌘, (Windows、Linux Ctrl+,))中通过搜索“everywhere”找到它。
-
打开
main.rs
并单击编辑器左侧的装订线以在println!
行上设置一个断点。它应显示为红色圆点。 -
要开始调试,请使用 Rust Analyzer: Debug 命令或选择
main()
上方的 Debug CodeLens。
后续步骤
这只是一个简短的概述,展示了 VS Code 中 rust-analyzer 扩展的功能。有关更多信息,请参阅 Rust Analyzer 扩展用户手册中提供的详细信息,包括如何调整特定的VS Code 编辑器配置。
要及时了解 rust-analyzer 扩展的最新功能/错误修复,请参阅更新日志。您还可以通过在扩展视图安装下拉列表中安装 rust-analyzer 预发布版本来试用新功能和修复。
如果您有任何问题或功能请求,请随时在 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 许可证(社区版、专业版或企业版),您就可以将 Visual Studio Build Tools 中的 C++ 工具集与 Visual Studio Code 一起使用,以编译、构建和验证任何代码库。
macOS
您可能需要在终端中运行 xcode-select --install
来安装 XCode 工具集。
Linux
您可能需要在终端中运行 sudo apt-get install build-essential
通过 build-essential
包安装 GCC 工具集。
有关更多故障排除建议,请参阅Rust 安装指南。