Visual Studio Code 中的 Rust
Rust 是一种强大的编程语言,通常用于系统编程,其中性能和正确性是高优先级的。如果你是 Rust 的新手并想了解更多,The Rust Programming Language 在线书籍是一个很好的起点。本主题详细介绍了如何在 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'。你应该安装发布版本。
我们将在本主题中讨论许多rust-analyzer的功能,但您也可以参考扩展的文档,网址为https://rust-analyzer.github.io。
检查您的安装
安装Rust后,您可以通过打开一个新的终端/命令提示符并输入以下内容来检查是否一切安装正确:
rustc --version
这将输出Rust编译器的版本。如果您想要更多详细信息,可以添加--verbose
参数。如果遇到问题,您可以查阅Rust的安装指南。
您可以通过运行以下命令来保持您的Rust安装更新到最新版本:
rustup update
Rust 每 6 周发布一次新的稳定版本,因此这是一个好习惯。
本地 Rust 文档
当你安装Rust时,你也会在本地机器上安装完整的Rust文档集,你可以通过输入rustup doc
来查看。Rust文档,包括The Rust Programming Language和The Cargo Book,将在你的本地浏览器中打开,这样你就可以在离线状态下继续你的Rust之旅。
你好,世界
货物
当你使用rustup安装Rust时,工具集包括rustc编译器、rustfmt源代码格式化工具和clippy Rust代码检查工具。你还会得到Cargo,Rust的包管理器,它可以帮助下载Rust依赖项并构建和运行Rust程序。你会发现,在使用Rust时,几乎所有的操作都会用到cargo
。
Cargo 新建
创建你的第一个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 构建
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 功能由 Rust 语言服务器 rust-analyzer 提供,它提供了详细的代码信息和智能建议。
当你首次打开一个Rust项目时,你可以在状态栏的左下角观察rust-analyzer的进度。你需要等待rust-analyzer完全审查完你的项目,以获得语言服务器的全部功能。
内嵌提示
你可能首先注意到的是rust-analyzer提供了inlay hints,以在编辑器中以浅色文本显示推断的类型、返回值和命名参数。
虽然内联提示有助于理解您的代码,您也可以通过编辑器 > 内联提示:启用设置(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来获取更多的lint。要在rust-analyzer中启用clippy集成,将Rust-analyzer > Check: Command (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 扩展还支持其他代码重构和代码生成功能,该扩展称之为 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 扩展通过命令面板中的 Rust Analyzer: Debug 命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))和编辑器中的 Run|Debug CodeLens 提供基本的调试支持。
让我们调试之前创建的Hello World程序。首先我们将在main.rs
中设置一个断点。
-
你需要启用设置 调试:允许在任何地方设置断点,你可以在设置编辑器(⌘, (Windows, Linux Ctrl+,))中通过搜索 'everywhere` 找到它。
-
打开
main.rs
并在编辑器中点击左侧的装订线,在println!
行设置断点。它应该显示为一个红点。 -
要开始调试,请使用Rust Analyzer: Debug命令或选择Debug CodeLens关于
main()
。
下一步
这是对VS Code中rust-analyzer扩展功能的简要概述。更多信息,请参阅Rust Analyzer扩展用户手册中提供的详细信息,包括如何调整特定的VS Code编辑器配置。
要了解 rust-analyzer 扩展的最新功能/错误修复,请参阅 CHANGELOG。您还可以通过安装扩展视图 安装 下拉菜单中提供的 rust-analyzer 预发布版本 来尝试新功能和修复。
如果您有任何问题或功能请求,请随时在rust-analyzer扩展的GitHub仓库中记录它们。
如果您想了解更多关于VS Code的信息,请尝试以下主题:
- Basic Editing - VS Code 编辑器基础知识的快速介绍。
- 安装扩展 - 了解在Marketplace中可用的其他扩展。
- Code Navigation - 快速浏览您的源代码。
常见问题
链接器错误
如果您在尝试构建Rust程序时看到诸如"错误:未找到链接器link.exe
"的链接器错误,您可能缺少必要的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
来安装GCC工具集,这可以通过build-essential
包来实现。
如需进一步的故障排除建议,请参阅Rust安装指南。