基本上照著官方的指引 Rust Editor Configuration,設置 Fuchsia OS 開發的 Rust 開發環境主要就兩個步驟:

  1. 產生 Cargo.toml
  2. 設定編輯器使用 Rust 的 Language Server (RLS)

產生 Cargo.toml

很簡單,就是用 fx gen-cargo //garnet/foo/path/to/target:label 產生對應的 Cargo.toml。例如 fx gen-cargo //garnet/bin/log_listener:bin 會產生 /garnet/bin/log_listener/Cargo.toml

設定 RLS

官方文檔提到要先把 Fuchsia 自帶的 Rust 連結到 rustup,並且設成預設的 toolchain:

$ rustup toolchain link fuchsia /<your Fuchsia root>/buildtools/<platform>/rust
$ rustup default fuchsia

我是有做第一步,但第二步我比較持保留態度,之後試過似乎不做也沒影響,我會建議跳過這一步。

Vim

跟 C++ 類似,只是 Language Server 我們必須從 clangd 換成 RLS,所以可以在 Vim 裡用 :CocInstall coc-rls 來安裝 coc-rls extension,如果你系統之前就有裝過 RLS 的話,在 Vim 裡打開對應的目錄就會有 code completion 的功能了。

如果你的系統沒有 RLS 或你覺得用 Fuchsia 自帶的 Rust toolchain 比較保險,可以用 :CocConfig 把下列設定加進去:

{
  "rust.target": "x86_64-fuchsia",
  "rust.target_dir": "/<your Fuchsia root>/out/cargo_target",
  "rust.unstable_features": true,
  "rust-client.rlsPath": "/<your Fuchsia root>/buildtools/<platform>/rust/bin/rls",
  "rust-client.disableRustup": true,

  // Some optional settings that may help:
  "rust.goto_def_racer_fallback": true,
  "rust-client.logToFile": true,
}

Visual Studio Code

VSCode 則是需要安裝 Rust (rls) 這個 plugin。同樣如果你的系統沒有 RLS 或你覺得用 Fuchsia 自帶的 Rust toolchain 比較保險,加入下列的設定到 VS Code 裡:

{
  "rust.target": "x86_64-fuchsia",
  "rust.target_dir": "/<your Fuchsia root>/out/cargo_target",
  "rust.unstable_features": true,
  "rust-client.rlsPath": "/<your Fuchsia root>/buildtools/<platform>/rust/bin/rls",
  "rust-client.disableRustup": true,

  // Some optional settings that may help:
  "rust.goto_def_racer_fallback": true,
  "rust-client.logToFile": true,
}