在 VS Code 中试用

Rust in Visual Studio Code

Rust 是一种强大的编程语言,常用于系统编程,其中性能和正确性是优先考虑的因素。如果您是 Rust 的新手,想了解更多信息,《Rust 程序设计语言》在线书籍是一个很好的入门资源。本文详细介绍了如何在 Visual Studio Code 中设置和使用 Rust,重点介绍 rust-analyzer 扩展。

Rust extension banner

注意

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 extension in the Extensions view

我们将在本文中讨论 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

Cargo build output in the integrated terminal

现在您会有一个 target\debug 文件夹,其中包含构建输出,包括一个名为 hello_world.exe 的可执行文件。

运行 Hello World

Cargo 也可用于通过 cargo run 运行您的 Rust 项目。

cargo run

您也可以在终端中手动运行 hello_world.exe,方法是键入 .\target\debug\hello_world

Manually running hello_world.exe output in the integrated terminal

IntelliSense

IntelliSense 功能由 Rust 语言服务器 rust-analyzer 提供,它提供了详细的代码信息和智能建议。

当您首次打开一个 Rust 项目时,您可以在状态栏的左下角查看 rust-analyzer 的进度。您需要等待 rust-analyzer 完全审查完您的项目,才能获得语言服务器的全部强大功能。

rust-analyzer in progress status in the VS Code Status bar

内嵌提示

您可能会注意到的第一件事是 rust-analyzer 提供的内嵌提示,在编辑器中使用浅色文本显示推断的类型、返回值和命名参数。

Rust program with inlay hints displayed

虽然内嵌提示有助于理解您的代码,但您也可以在设置中通过编辑器 > 内嵌提示:启用设置(editor.inlayHints.enabled)配置此功能。

悬停信息

将鼠标悬停在任何变量、函数、类型或关键字上,都会为您提供有关该项的信息,例如文档、签名等。您还可以跳转到您自己的代码或标准 Rust 库中的类型定义。

Hover information for the Rust String type

自动补全

当您在 Rust 文件中键入时,IntelliSense 会为您提供建议的补全和参数提示。

Smart completion for Rust String member

提示

使用 ⌃Space (Windows, Linux Ctrl+Space) 手动触发建议。

语义语法高亮

由于对项目源代码的深入理解,rust-analyzer 能够使用语义语法高亮和样式设置。例如,您可能已经注意到可变变量在编辑器中带有下划线。

Mutable variable underline in the editor

能够快速分辨 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 提供的代码检查功能,用于检测源代码中的问题。

linter warning about an unused variable

默认启用的 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)激活行中最接近的快速修复,无论您的光标在该行的哪个位置。

该命令会突出显示将通过快速修复进行重构或修复的源代码。常规的代码操作和非修复重构仍然可以在光标位置激活。

Quick Fixes for greeting unused boolean variable

重构

由于 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 notification to install a debugging extension

使用 Rust Analyzer:调试

rust-analyzer 扩展通过命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中的Rust Analyzer:调试命令和编辑器中的运行|调试 CodeLens 提供基本调试支持。

让我们调试之前创建的 Hello World 程序。首先,我们将在 main.rs 中设置一个断点。

  1. 您需要启用设置调试:允许在任何地方设置断点,您可以在设置编辑器(⌘, (Windows, Linux Ctrl+,))中搜索“everywhere”找到该设置。

    Debug: Allow Breakpoints Everywhere in the Settings editor

  2. 打开 main.rs 并在编辑器的左侧空白处单击,在 println! 行上设置一个断点。它应该显示为一个红点。

    Red breakpoint dot in the left gutter of the editor

  3. 要开始调试,请使用Rust Analyzer:调试命令或选择 main() 函数上方的调试 CodeLens。

    Debug session stopped at breakpoint

下一步

这是对 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 安装指南。