Visual Studio Code 中的 Rust

Rust 是一种强大的编程语言,通常用于系统编程,其中性能和正确性是高优先级的。如果你是 Rust 的新手并想了解更多,The Rust Programming Language 在线书籍是一个很好的起点。本主题详细介绍了如何在 Visual Studio Code 中使用 rust-analyzer 扩展来设置和使用 Rust。

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扩展

我们将在本主题中讨论许多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 LanguageThe 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

集成终端中的Cargo构建输出

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

运行 Hello World

Cargo 也可以用来通过 cargo run 运行你的 Rust 项目。

cargo run

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

在集成终端中手动运行hello_world.exe的输出

智能感知

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

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

VS Code 状态栏中的 rust-analyzer 进度状态

内嵌提示

你可能首先注意到的是rust-analyzer提供了inlay hints,以在编辑器中以浅色文本显示推断的类型、返回值和命名参数。

显示内嵌提示的Rust程序

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

悬停信息

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

Rust String 类型的悬停信息

自动补全

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

Rust String 成员的智能补全

提示: 使用 ⌃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,用于检测源代码中的问题。

关于未使用变量的linter警告

默认启用的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 扩展通过命令面板中的 Rust Analyzer: Debug 命令(⇧⌘P (Windows, Linux Ctrl+Shift+P))和编辑器中的 Run|Debug CodeLens 提供基本的调试支持。

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

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

    调试:在设置编辑器中允许在任何地方设置断点

  2. 打开 main.rs 并在编辑器中点击左侧的装订线,在 println! 行设置断点。它应该显示为一个红点。

    编辑器左侧装订线中的红色断点圆点

  3. 要开始调试,请使用Rust Analyzer: Debug命令或选择Debug CodeLens关于main()

    调试会话在断点处停止

下一步

这是对VS Code中rust-analyzer扩展功能的简要概述。更多信息,请参阅Rust Analyzer扩展用户手册中提供的详细信息,包括如何调整特定的VS Code编辑器配置。

要了解 rust-analyzer 扩展的最新功能/错误修复,请参阅 CHANGELOG。您还可以通过安装扩展视图 安装 下拉菜单中提供的 rust-analyzer 预发布版本 来尝试新功能和修复。

如果您有任何问题或功能请求,请随时在rust-analyzer扩展的GitHub仓库中记录它们。

如果您想了解更多关于VS Code的信息,请尝试以下主题:

常见问题

链接器错误

如果您在尝试构建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安装指南。