在 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 扩展
您可以通过扩展视图(⇧⌘X(Windows、Linux Ctrl+Shift+X))在 VS Code 中查找并安装 rust-analyzer 扩展,并搜索“rust-analyzer”。您应该安装发布版本。
我们将在本主题中讨论 rust-analyzer 的许多功能,您也可以在 https://rust-analyzer.github.io 上参考扩展的文档。
检查您的安装
安装 Rust 后,您可以通过打开新的终端/命令提示符并键入
rustc --version
来检查一切是否安装正确,这将输出 Rust 编译器的版本。如果您想要更多详细信息,可以添加 --verbose
参数。如果您遇到问题,可以查阅 Rust 安装指南。
您可以通过运行以下命令使您的 Rust 安装保持最新版本
rustup update
每 6 周发布新的 Rust 稳定版本,因此这是一个好习惯。
本地 Rust 文档
当您安装 Rust 时,您还会在本地机器上安装完整的 Rust 文档集,您可以通过键入 rustup doc
来查看这些文档。Rust 文档,包括 《Rust 编程语言》 和 《Cargo 书籍》,将在您的本地浏览器中打开,因此您可以在离线时继续您的 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 清单 文件。
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 提供的 linting,用于检测源代码中的问题。
默认情况下启用 rustc linter,它可以检测基本的 Rust 错误,但您可以使用clippy 来获取更多的 lints。要在 rust-analyzer 中启用 clippy 集成,请将 Rust-analyzer > 检查:命令 (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 选择 重命名符号。
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:调试
rust-analyzer 扩展通过命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 和编辑器中的 运行|调试 CodeLens 中可用的 Rust Analyzer:调试 命令提供基本的调试支持。
让我们调试之前创建的 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 扩展的最新功能/错误修复,请参阅更新日志。您还可以通过安装扩展视图 安装 下拉列表中的 rust-analyzer 预发布版本 来试用新功能和修复。
如果您有任何问题或功能请求,请随时在 rust-analyzer 扩展的GitHub 存储库中记录。
如果您想了解有关 VS Code 的更多信息,请尝试以下主题
- 基本编辑 - VS Code 编辑器基础知识的快速介绍。
- 安装扩展 - 了解Marketplace中提供的其他扩展。
- 代码导航 - 快速浏览您的源代码。
常见问题
链接器错误
当您尝试构建 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 Build Tools 中的 C++ 工具集以及 Visual Studio Code 来编译、构建和验证任何代码库,只要您还拥有有效的 Visual Studio 许可证(社区版、专业版或企业版)。
macOS
您可能需要在终端中运行 xcode-select --install
来安装 XCode 工具集。
Linux
您可能需要在终端中运行 sudo apt-get install build-essential
通过 build-essential
包安装 GCC 工具集。
有关进一步的故障排除建议,请参阅Rust 安装指南。