基本上照著官方的指引 Rust Editor Configuration,設置 Fuchsia OS 開發的 Rust 開發環境主要就兩個步驟:
- 產生
Cargo.toml
- 設定編輯器使用 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,
}