附錄 D - 實用開發工具
在此附錄中,我們會討論些 Rust 專案提供的實用開發工具。我們會介紹自動格式化工具、修正警告最快速的方式、linter 以及 IDE 的整合工具。
透過 rustfmt
自動格式化
rustfmt
工具會依據社群程式碼風格來重新格式化你的程式碼。許多協作專案都會使用 rustfmt
來避免 Rust 風格的歧義,每個人都能用此工具格式化他們的程式碼。
欲安裝 rustfmt
,請輸入以下命令:
$ rustup component add rustfmt
此命令會給你 rustfmt
與 cargo-fmt
,就像 Rust 會提供你 rustc
與 cargo
一樣。要格式化任何 Cargo 專案的話,請輸入:
$ cargo fmt
執行此命令會重新格式化目前 crate 中所有的 Rust 程式碼。不過這只會變更程式碼風格,並不會影響程式碼語義。想瞭解更多 rustfmt
的資訊,歡迎查閱它的技術文件。
透過 rustfix
修正你的程式碼
rustfix 工具包含在 Rust 的安裝中,它可以自動修復編譯器警告,這可能是你想要糾正問題的明確方法。你以前可能看過編譯器警告。舉例來說,請參考以下程式碼:
檔案名稱:src/main.rs
fn do_something() {} fn main() { for i in 0..100 { do_something(); } }
我們在此呼叫 do_something
函式 100 次,但是我們在 for
迴圈中完全沒用到變數 i
。Rust 會警告我們:
$ cargo build
Compiling myprogram v0.1.0 (file:///projects/myprogram)
warning: unused variable: `i`
--> src/main.rs:4:9
|
4 | for i in 0..100 {
| ^ help: consider using `_i` instead
|
= note: #[warn(unused_variables)] on by default
Finished dev [unoptimized + debuginfo] target(s) in 0.50s
警告訊息建議我們改使用 _i
來作為名稱,底線指的是我們認定此變數不會被使用。我們可以透過執行 cargo fix
來使用 rustfix
工具以自動採用這些建議:
$ cargo fix
Checking myprogram v0.1.0 (file:///projects/myprogram)
Fixing src/main.rs (1 fix)
Finished dev [unoptimized + debuginfo] target(s) in 0.59s
當我們再次檢查 src/main.rs,我們會看到 cargo fix
已經將程式碼修正了:
檔案名稱:src/main.rs
fn do_something() {} fn main() { for _i in 0..100 { do_something(); } }
for
迴圈變數現在改名為 _i
,而警告也不再出現了。
你也可以使用 cargo fix
命令來在不同的 Rust 版號之間做轉換程式碼。版號會在附錄 E 做介紹。
透過 Clippy 運用更多功能
Clippy 工具是一系列的 lint 集合,用來分析程式碼以獲取常見錯誤並改善你的 Rust 程式碼。
要安裝 Clippy 的話,輸入以下命令:
$ rustup component add clippy
要在任何 Cargo 專案執行 Clippy,輸入以下命令:
$ cargo clippy
舉例來說,假設你在寫程式時使用到如 pi 這種數學常數的近似值,如以下所示:
檔案名稱:src/main.rs
fn main() { let x = 3.1415; let r = 8.0; println!("the area of the circle is {}", x * r * r); }
對此專案執行 cargo clippy
會顯示以下錯誤:
error: approximate value of `f{32, 64}::consts::PI` found
--> src/main.rs:2:13
|
2 | let x = 3.1415;
| ^^^^^^
|
= note: `#[deny(clippy::approx_constant)]` on by default
= help: consider using the constant directly
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant
此錯誤告訴你 Rust 已經有個更精準的 PI
常數定義,如果改使用此定義的話,你的程式會更準確。你可以將你的程式碼改使用 PI
常數。以下程式碼就不會透過 Clippy 獲得任何錯誤或警告:
檔案名稱:src/main.rs
fn main() { let x = std::f64::consts::PI; let r = 8.0; println!("the area of the circle is {}", x * r * r); }
關於更多 Clippy 的資訊,請查閱它的技術文件。
使用 rust-analyzer
整合 IDE
為了協助 IDE 的整合,Rust 社群推薦使用 rust-analyzer
。此工具會與 Language Server Protocol 溝通,來提供許多與編譯器相關的協助,這是 IDE 與程式語言彼此溝通的協定規格。rust-analyzer
可用於各種不同的客戶端,像是 Visual Studio Code 的 Rust analyzer 外掛。
前往 rust-analyzer
專案的首頁可以了解更多安裝方法,讓你所使用的 IDE 也能獲得 Language Server 的支援。這樣你的 IDE 就能獲得許多功能像是:自動補全、跳至定義與顯示錯誤等等。