由于在 Fuchsia 上没有适用于 Rust 开发的特定编辑器,因此 vim
和 VS 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 实现。
Syntastic:
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'
Emacs
完成状态
如需查看相关说明,请参阅 rust-analyzer 手册。
保存时检查
您将使用 flycheck 编译 Rust 文件。flycheck 将解析这些输出, 突出显示错误。您还需要使用 flycheck-rust 使用 cargo 而非 rustc 编译。两者均可从 melpa。
请注意,此工作流基于 cargo,比 基于 rust-analyzer 的工作流。
如果您还没有 melpa,请按照以下说明操作 此处。
在 M-x list-packages
中安装 flycheck
和 flycheck-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>
,然后在常规
。
现在,您需要确保所使用的默认 cargo
和 rustc
使用的都是其 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 项目的根方法有以下两种:
- 为包含
Cargo.toml
的文件夹打开一个新的 Sublime 窗口(例如garnet/foo/path/to/target
) - 或者,转到顶部的菜单栏 ->项目 ->将文件夹添加到项目。此操作会保留您的所有文件
一个 Sublime 窗口中,即使您同时打开了更宽泛的
fuchsia
文件夹,它也能正常运行。
完成这些步骤后,您可能需要重启 Sublime。
Intellij(自定义代码补全)
请参阅 Intellij Rust 网站上的说明。
最后,按照这些步骤生成供 Intellij 使用的 Cargo.toml
文件。
请注意,基于 cargo 的工作流比基于 rust-analyzer 的工作流更容易中断。