Rust 编辑器配置

由于在 Fuchsia 上没有用于 Rust 开发的特定编辑器,因此 vimVS Code 是最常用的选项。不过,您可以在本文档中阅读有关如何设置任何编辑器的文档。

rust-analyzer设置

rust-analyzer 是 Rust 的一种语言服务器协议 (LSP) 实现。我们推荐使用此工作流程,只需极少的编辑器设置即可。

rust-analyzer 使用 out/ 目录中名为 rust-project.json 的文件,该文件是基于 gn gen 时的 build 图生成的。指向 rust-project.json 的符号链接位于 Fuchsia 树的根目录中。

rust-project.json 文件格式目前不稳定。有时,这可能会导致出现意外的版本不匹配问题,即 GN 会生成 rust-analyzer 预期的 rust-project.json,导致 rust-analyzer 无法正常运行。

目前支持的版本

目前,请使用最新版本rust-analyzer

Visual Studio Code

如需在 VS Code 上设置 rust-analyzer,请参阅 VS Code 指南适用于 Fuchsia 的其他 Vs Code 扩展程序

Vim

安装 rust-lang/rust.vim,该工具还集成了以下工具:

  • Tagbar:强烈建议使用 universal-ctag,但也支持其他 ctag 实现。

  • 语法rust.vim 会自动将 cargo 注册为 Rust 的语法检查工具。但是,除非您设置 cargo,否则测试会失败。如果您想停用集成(或使用 rust-analyzer 检查代码,例如通过 YouCompleteMe),请将以下代码添加到 ~/.vimrc 中:

    let g:syntastic_rust_checkers = []
    
  • 自动格式化:如需在保存时运行 rustfmt(默认处于停用状态),请将以下代码添加到 ~./vimrc 中:

    let g:rustfmt_command = 'FUCHSIA_DIR/prebuilt/third_party/rust/HOST_OS/bin/rustfmt'
    let g:rustfmt_autosave = 1
    

如需了解 IDE 支持,请参阅 rust-analyzer 手册的 vim 部分。对于 YouCompleteMe,如果从源代码安装,请添加 --rust-completer(或 --all),该控件应开箱即用。您还可以在 ~/.vimrc 中指定独立 rust-analyzer 的路径(由于版本兼容性,这不一定有效);以下示例假设它安装到 ~/.local/bin/rust-analyzer(请注意,路径中有意缺少 /bin):

let g:ycm_rust_toolchain_root = $HOME . '/.local'

EMC

完成

如需了解相关说明,请参阅 rust-analyzer 手册

检查保存情况

保存 Rust 文件时,您将使用 flycheck 编译它们。flycheck 将解析这些输出并突出显示错误。您还将使用 flycheck-rust,这样它就会使用 cargo 而不是 rustc 进行编译。melpa 上提供了这两者。

请注意,此工作流基于 cargo,因此比基于 Rust 分析器的工作流更容易中断。

如果您还没有 melpa,请按照此处的说明进行操作。

M-x list-packages 中安装 flycheckflycheck-rust。输入 i 以排队等待安装缺少的内容,然后输入 x 以执行安装。

接下来,确保在启动时运行 flycheck-rust。将其放入 .emacs 文件中:

(with-eval-after-load 'rust-mode
  (add-hook 'flycheck-mode-hook #'flycheck-rust-setup))

您希望 cargo 运行“check”而不是“test”,因此将 flycheck-rust-check-tests 设置为 nil。为此,您可以输入 C-h v flycheck-rust-check-tests<RET>,然后按正常方式自定义该变量。

现在,您需要确保您使用的默认 cargorustc 是这两个版本的 Fuchsia 版本。如果您尚未安装 rustup,请先安装。然后,在 Fuchsia 根目录中,输入:

rustup toolchain link fuchsia FUCHSIA_DIR/prebuilt/third_party/rust/HOST_OS
rustup default fuchsia

最后,按照相应步骤为您要处理的 GN 目标生成 Cargo.toml

您可以了解如何调整 flycheck 以根据需要显示错误。输入 C-h v flycheck-highlighting-mode<RET> 并对其进行自定义。同时自定义 C-h v flycheck-indiation-mode<RET>

现在重启 emacs 并试用。

测试和调试

如需测试它是否正常运行,您可以运行 M-x flycheck-compile 并查看 flycheck 用于检查语法的命令行。根据您是位于 lib 还是 bin 中,它应如下所示:

cargo check --lib --message-format\=json
cargo check --bin recovery_netstack --message-format\=json

如果它运行 rustc 而不是 cargo,那是因为您没有 fx gen-cargo

请注意,它可能会报告当前文件的第一行错误。这些错误实际上是其他文件的错误错误的注释会为有问题的文件命名。

卓越文字

使用 Rust-Enhanced 进行语法检查

按照说明生成 Cargo.toml.cargo/config,这还会将 cargo 设置为使用 Fuchsia Rust 工具链。

然后,安装 Rust Enhanced 插件。 现在,您应该可以在保存时进行语法检查,并能够从上下文菜单 / 命令面板运行 cargo check。得益于 fargo,一些测试也看起来运行正常,但尚未经过全面测试。

使用语言服务器提供智能感知 / 悬停提示 / go-to-definition

初始设置

首先,为 Sublime 安装 LSP 软件包。然后,按照 Sublime 的 rust-analyzer 设置说明操作。

用法

为了使语言服务器正常运行,您需要打开一个文件夹,其中包含一个 Cargo.toml 作为 Sublime 项目的根目录。您可以采用下列两种方法:

  1. 为包含 Cargo.toml 的文件夹(例如 garnet/foo/path/to/target)打开新的 Sublime 窗口
  2. 或者,依次转到顶部的菜单栏 -> Project -> Add Folder to Project。这会将您的所有文件都保存在同一个 Sublime 窗口中,即使您还打开了更广泛的 fuchsia 文件夹也是如此。

在完成这些步骤后,您可能需要重启 Sublime。

Intellij(自定义代码补全)

请参阅 Intellij Rust 网站上的说明。 最后,按照这些步骤生成一个 Cargo.toml 文件,以供 Intellij 使用。 请注意,基于货的工作流比基于 Rust 分析器的工作流更容易被破坏。