Rust 編輯器設定

由於 Fuchsia 上沒有特定的 Rust 開發編輯器,因此 vimVS Code 是最熱門的選項。不過,您可以參考本文件來設定任何編輯器的相關文件。

rust-analyzer」設定

rust-analyzer 是 Rust 的語言伺服器通訊協定 (LSP) 實作。這是建議的工作流程,只要編輯器設定即可使用。

rust-analyzer 會使用 out/ 目錄中的 rust-project.json 檔案,這個檔案是在 gn gen 時依據建構圖表所產生。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:強烈建議使用 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'

歐洲、中東和非洲地區

完成

如需操作說明,請參閱 rust-analyzer 手冊

勾選「儲存」

您將在儲存 Rust 檔案時,使用 flycheck 來編譯。flycheck 會剖析這些輸出,並醒目顯示錯誤。您也將使用 flycheck-rust,以便透過 Cargo 進行編譯,而非使用 rustc。兩者均可從 melpa 取得。

請注意,這個工作流程是以貨物為基礎,比起 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-tests 設為 nil。方法是輸入 C-h v flycheck-rust-check-tests<RET>,然後按照一般方式自訂變數。

現在,請確保您目前使用的預設 cargorustc 是 Fuchsia 版本的 Fuchsia 版本。如果您尚未安裝 Rustup,請先完成這項操作。接著,在 Fuchsia 根目錄中,輸入:

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

最後,按照步驟為您要處理的 GN 目標產生 Cargo.toml

請參閱這篇文章,瞭解如何調整 fly 以便視需要顯示錯誤。輸入並自訂 C-h v flycheck-highlighting-mode<RET>。一併自訂 C-h v flycheck-indiation-mode<RET>

現在請重新啟動 emacs 並試用。

測試並偵錯

如要測試是否正常運作,您可以執行 M-x flycheck-compile,並查看用於檢查語法的指令列。根據您在 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 的協助下,部分測試也會顯示為正常執行,但這尚未經過全面測試。

使用語言伺服器處理情報 / 懸停工具提示 / 前往定義

設定

首先,安裝 Sublime 的 LSP 套件。接著,請按照 Sublime 的 rust-analyzer 設定操作說明進行。

使用方法

為了讓語言伺服器正常運作,您必須開啟包含 Cargo.toml 的資料夾做為 Sublime 專案的根目錄。方法有以下兩種:

  1. 為包含 Cargo.toml 的資料夾開啟新的 Sublime 視窗 (例如 garnet/foo/path/to/target)
  2. 或者,請前往頂端選單列 ->「專案」->「新增資料夾至專案」。如此一來,您的所有檔案都會保留在一個 Sublime 視窗中,即使同時開啟較寬的 fuchsia 資料夾也一樣。

完成上述步驟後,你可能需要重新啟動 Sublime。

Intellij (自訂程式碼完成功能)

請參閱 Intellij Rust 網站的操作說明。最後,請按照這些步驟產生 Cargo.toml 檔案,供 Intellij 使用。請注意,相較於使用 Rust 分析工具,以貨物為基礎的工作流程更有可能中斷。