尝试以扩展 VS Code 中的代理模式!

在 Visual Studio Code 中使用 Rust

Rust 是一门强大的编程语言,通常用于对性能和正确性有高要求的系统编程。如果你是 Rust 新手,想了解更多,在线书籍 《Rust 编程语言》 是一个很好的入门资料。本主题将详细介绍如何在 Visual Studio Code 中通过 rust-analyzer 扩展来设置和使用 Rust。

Rust extension banner

注意

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 扩展。你应该安装**正式版 (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 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 包(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

你也可以在终端中输入 .\target\debug\hello_world 来手动运行 hello_world.exe

Manually running hello_world.exe output in the integrated terminal

智能感知

智能感知功能由 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

虽然内联提示有助于理解你的代码,但你也可以通过 **编辑器 > Inlay Hints: Enabled** 设置 (editor.inlayHints.enabled) 来配置该功能。

悬停信息

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

Hover information for the Rust String type

自动补全

当你在 Rust 文件中输入时,智能感知会为你提供建议的补全和参数提示。

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 提供的 Linting 功能,用于检测源代码中的问题。

linter warning about an unused variable

rustc linter 默认启用,可以检测基本的 Rust 错误,但你可以使用 clippy 来获得更多的 lints。要在 rust-analyzer 中启用 clippy 集成,请将 **Rust-analyzer > Check: Command** (`rust-analyzer.check.command`) 设置更改为 `clippy`,而不是默认的 `check`。现在,当你保存文件时,rust-analyzer 扩展将运行 `cargo clippy`,并在编辑器和“问题”视图中直接显示 clippy 的警告和错误。

快速修复

当 linter 在你的源代码中发现错误和警告时,rust-analyzer 通常可以提供建议的快速修复(也称为代码操作),这些修复可通过编辑器中的灯泡悬停提示获得。你可以通过 ⌘. (Windows、Linux Ctrl+.) 快速打开可用的快速修复。

此外,**代码操作小组件:包括附近的快速修复 (Code Action Widget: Include Nearby Quick Fixes)** (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 文件,或者从**命令面板**或编辑器的上下文菜单中运行**格式化文档**命令。

你还可以选择在每次保存(**Editor: Format On Save**)或粘贴(**Format On Paste**)时运行格式化程序,以便在你工作时自动保持 Rust 代码的正确格式。

调试

rust-analyzer 扩展支持在 VS Code 内部调试 Rust。

安装调试支持

要开始调试,你首先需要安装两个带有调试支持的语言扩展之一:

  • Microsoft C++ (ms-vscode.cpptools) – 在 Windows 上
  • CodeLLDB (vadimcn.vscode-lldb) – 在 macOS/Linux 上

如果你忘记安装这些扩展之一,当你尝试启动调试会话时,rust-analyzer 会提供一个通知,其中包含指向 VS Code 应用市场的链接。

rust-analyzer notification to install a debugging extension

使用 Rust Analyzer: Debug

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

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

  1. 你需要启用 **Debug: Allow Breakpoints Everywhere** 设置,你可以在设置编辑器 (⌘, (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: Debug** 命令或选择 `main()` 上方的**调试 (Debug)** 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 上,你还需要安装微软 C++ 生成工具,以便获取 C/C++ 链接器 `link.exe`。请确保在运行 Visual Studio 安装程序时选择**使用 C++ 的桌面开发**。

注意

只要你拥有有效的 Visual Studio 许可证(Community、Pro 或 Enterprise 均可),你就可以将 Visual Studio 生成工具中的 C++ 工具集与 Visual Studio Code 一起使用,来编译、构建和验证任何代码库。

macOS

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

Linux

你可能需要通过在终端中运行 sudo apt-get install build-essential 来安装 GCC 工具集(通过 `build-essential` 包)。

有关进一步的故障排除建议,请参阅 Rust 安装指南。