由於 Fuchsia 上沒有特定的 Rust 開發編輯器,因此 vim
和 VS 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 實作。
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'
歐洲、中東和非洲地區
完成
如需操作說明,請參閱 rust-analyzer 手冊。
勾選「儲存」
您將在儲存 Rust 檔案時,使用 flycheck 來編譯。flycheck 會剖析這些輸出,並醒目顯示錯誤。您也將使用 flycheck-rust,以便透過 Cargo 進行編譯,而非使用 rustc。兩者均可從 melpa 取得。
請注意,這個工作流程是以貨物為基礎,比起 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 版本的 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 專案的根目錄。方法有以下兩種:
- 為包含
Cargo.toml
的資料夾開啟新的 Sublime 視窗 (例如garnet/foo/path/to/target
) - 或者,請前往頂端選單列 ->「專案」->「新增資料夾至專案」。如此一來,您的所有檔案都會保留在一個 Sublime 視窗中,即使同時開啟較寬的
fuchsia
資料夾也一樣。
完成上述步驟後,你可能需要重新啟動 Sublime。
Intellij (自訂程式碼完成功能)
請參閱 Intellij Rust 網站的操作說明。最後,請按照這些步驟產生 Cargo.toml
檔案,供 Intellij 使用。請注意,相較於使用 Rust 分析工具,以貨物為基礎的工作流程更有可能中斷。