Rust 编辑器配置

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

rust-analyzer 设置

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

rust-analyzer 会使用 out/ 目录中名为 rust-project.json 的文件, 根据构建图在 gn gen 生成。指向 rust-project.json 的符号链接 放在 Fuchsia 树的根目录下。

rust-project.json 文件格式目前不稳定。有时,这可能会导致 意外的版本不匹配,其中 GN 生成 rust-project.json,且 rust-analyzer 为 不符合预期,导致 rust-analyzer 无法正常工作。

目前支持的版本

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

Visual Studio Code

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

Vim

安装 rust-lang/rust.vim,它还会与以下产品集成:

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

  • Syntasticrust.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'

Emacs

完成状态

如需查看相关说明,请参阅 rust-analyzer 手册

保存时检查

您将使用 flycheck 编译 Rust 文件。flycheck 将解析这些输出, 突出显示错误。您还需要使用 flycheck-rust 使用 cargo 而非 rustc 编译。两者均可从 melpa

请注意,此工作流基于 cargo,比 基于 rust-analyzer 的工作流。

如果您还没有 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-testsnil。为此,您可以输入 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

请注意,它可能会在当前文件的第一行报告错误。这些是 另一个文件包含实际错误错误的注释会将 问题文件。

Sublime Text

使用 Rust 增强进行语法检查

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

然后,安装 Rust 增强插件。 现在,您应该在保存时进行语法检查,并能够从cargo check 上下文菜单 / 命令面板多亏了 fargo,一些测试似乎也运行正常,但这 尚未经过全面测试。

使用语言服务器获取智能信息 / 悬停提示 / go-to-definition

设置

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

用法

为了让语言服务器正常运行,您需要打开一个包含 Cargo.toml 的文件夹 作为 Sublime 项目的根方法有以下两种:

  1. 为包含 Cargo.toml 的文件夹打开一个新的 Sublime 窗口(例如 garnet/foo/path/to/target)
  2. 或者,转到顶部的菜单栏 ->项目 ->将文件夹添加到项目。此操作会保留您的所有文件 一个 Sublime 窗口中,即使您同时打开了更宽泛的 fuchsia 文件夹,它也能正常运行。

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

Intellij(自定义代码补全)

请参阅 Intellij Rust 网站上的说明。 最后,按照这些步骤生成供 Intellij 使用的 Cargo.toml 文件。 请注意,基于 cargo 的工作流比基于 rust-analyzer 的工作流更容易中断。