Visual Studio 代码中的 Rust

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

Rust 扩展横幅

注意: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扩展

您可以通过扩展视图 ( ⇧⌘X (Windows、Linux Ctrl+Shift+X ) ) 并搜索“rust -analyzer”,在 VS Code 中找到并安装 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 文档,包括Rust 编程语言Cargo Book,将在您的本地浏览器中打开,以便您可以在离线状态下继续您的 Rust 之旅。

你好世界

货物

当您使用 rustup 安装 Rust 时,该工具集包括 rustc 编译器、rustfmt 源代码格式化程序和 Clippy Rust linter。您还可以使用Rust 包管理器Cargo来帮助下载 Rust 依赖项并构建和运行 Rust 程序。您会发现,cargo在使用 Rust 时,您最终几乎会用到所有东西。

货物新

创建第一个 Rust 程序的一个好方法是使用 Cargo 通过键入 来构建新项目cargo new。这将创建一个简单的 Hello World 程序以及默认的Cargo.toml依赖文件。您传递要cargo new在其中创建项目的文件夹。

让我们创建Hello World。导航到您要在其中创建项目的文件夹并输入:

cargo new hello_world

要在 VS Code 中打开新项目,请导航到新文件夹并通过以下方式启动 VS Code code .

cd hello_world
code .

注意:为新文件夹启用工作区信任,因为您是作者。您可以为整个项目文件夹父级启用工作空间信任,以避免在创建新项目时出现提示,方法是选中“信任父文件夹 'my_projects` 中所有文件的作者”选项。

cargo new使用main.rs源代码文件和Cargo.toml Cargo 清单文件创建一个简单的 Hello World 项目。

src\
    main.rs
.gitignore
Cargo.toml

main.rs具有程序的入口函数main()并打印“Hello, world!” 使用 到控制台println!

fn main() {
    println!("Hello, world!");
}

这个简单的 Hello World 程序没有任何依赖项,但您可以在[dependencies].

货物建造

Cargo 可用于构建 Rust 项目。打开新的 VS Code集成终端( ⌃⇧` (Windows、Linux Ctrl+Shift+` ) ) 并输入cargo build

cargo build

集成终端中的货物构建输出

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

运行你好世界

Cargo 还可以用于通过cargo run.

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 提供嵌入提示,以在编辑器中以浅色文本显示推断类型、返回值、命名参数。

显示镶嵌提示的 Rust 程序

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

悬停信息

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

Rust String 类型的悬停信息

自动完成

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

Rust String 成员的智能补全

提示:使用⌃Space(Windows、Linux Ctrl+Space手动触发建议。

语义语法高亮

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

编辑器中的可变变量下划线

能够快速判断哪些 Rust 变量是可变的或不可变的可以帮助您理解源代码,但您也可以editor.semanticTokenColorCustomizations使用用户设置中的 VS Code 设置来更改样式。

在 中settings.json,您可以添加:

{
  "editor.semanticTokenColorCustomizations": {
    "rules": {
      "*.mutable": {
        "fontStyle": "", // set to empty string to disable underline, which is the default
      },
    }
  },
}

您可以在 rust-analyzer文档的编辑器功能部分了解有关 rust-analyzer 语义语法自定义的更多信息。

代码导航

编辑器的上下文菜单中提供了代码导航功能。

  • 转到定义 F12 - 转到类型定义的源代码。
  • Peek Definition ⌥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 提供的 linting,用于检测源代码的问题。

关于未使用变量的 linter 警告

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

快速修复

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

快速修复问候未使用的布尔变量

重构

由于 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 分析器:调试

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

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

  1. 您需要启用设置Debug:Allow Breakpoints Everywhere ,您可以通过搜索“everywhere”在设置编辑器 ( ⌘, (Windows, Linux Ctrl+, ) ) 中找到该设置。

    调试:在设置编辑器中允许到处设置断点

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

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

  3. 要开始调试,请使用Rust 分析器:调试命令或选择Debug CodeLens about main()

    调试会话在断点处停止

下一步

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

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

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

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

常见问题

链接器错误

如果您在尝试构建 Rust 程序时看到链接器错误,例如“错误:link.exe未找到链接器” ,则您可能缺少必要的 C/C++ 工具集。根据您的平台,您需要安装带有 C/C++ 链接器的工具集来组合 Rust 编译器输出。

视窗

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

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

苹果系统

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

Linux

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

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