现已推出!阅读 10 月份的新功能和修复。

Visual Studio Code 中的 Rust

Rust 是一种功能强大的编程语言,通常用于性能和正确性至关重要的系统编程。如果您是 Rust 的新手,想了解更多信息,请访问 Rust 编程语言 在线书籍,这是开始的绝佳场所。本主题详细介绍了如何在 Visual Studio Code 中设置和使用 Rust,以及使用 rust-analyzer 扩展。

Rust extension banner

注意:VS Code Marketplace 中还有另一个流行的 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 extension in the Extensions view

我们将在本主题中讨论 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。您还将获得 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 包(箱子)引用。

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

您也可以通过在终端中键入 .\target\debug\hello_world 来手动运行 hello_world.exe

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) - 显示包含类型定义的快速查看窗口。
  • 转到引用 ⇧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 代码格式正确。

调试

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 扩展通过**Rust Analyzer:调试**命令提供基本调试支持,该命令在命令面板中提供(⇧⌘P (Windows、Linux Ctrl+Shift+P))以及编辑器中的**运行 | 调试** 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”**,则你可能缺少必要的 C/C++ 工具集。根据你的平台,你需要安装一个包含 C/C++ 链接器的工具集,以合并 Rust 编译器的输出。

Windows

在 Windows 上,你需要安装 Microsoft C++ Build Tools,以获取 C/C++ 链接器 link.exe。在运行 Visual Studio 安装程序时,务必选择**使用 C++ 进行桌面开发**。

注意:只要你拥有有效的 Visual Studio 许可证(社区版、专业版或企业版),你就可以将 Visual Studio Build Tools 中的 C++ 工具集与 Visual Studio Code 结合使用,来编译、构建和验证任何代码库。

macOS

你可能需要通过在终端中运行 xcode-select --install 来安装 XCode 工具集。

Linux

你可能需要通过 build-essential 包安装 GCC 工具集,方法是在终端中运行 sudo apt-get install build-essential

有关更多故障排除建议,请参阅 Rust 安装 指南。