Rust 附錄 D:實用開發(fā)工具

2023-03-22 15:17 更新
appendix-04-useful-development-tools.md
commit efbafdba3618487fbc9305318fcab9775132ac15

本附錄,我們將討論 Rust 項目提供的用于開發(fā) Rust 代碼的工具。

通過 rustfmt 自動格式化

rustfmt 工具根據(jù)社區(qū)代碼風格格式化代碼。很多項目使用 rustfmt 來避免編寫 Rust 風格的爭論:所有人都用這個工具格式化代碼!

安裝 rustfmt

$ rustup component add rustfmt

這會提供 rustfmt 和 cargo-fmt,類似于 Rust 同時安裝 rustc 和 cargo。為了格式化整個 Cargo 項目:

$ cargo fmt

運行此命令會格式化當前 crate 中所有的 Rust 代碼。這應(yīng)該只會改變代碼風格,而不是代碼語義。請查看 該文檔 了解 rustfmt 的更多信息。

通過 rustfix 修復(fù)代碼

如果你編寫過 Rust 代碼,那么你可能見過那些有很明顯修復(fù)方式的編譯器警告。例如,考慮如下代碼:

文件名: src/main.rs

fn do_something() {}

fn main() {
    for i in 0..100 {
        do_something();
    }
}

這里調(diào)用了 do_something 函數(shù) 100 次,不過從未在 for 循環(huán)體中使用變量 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,會發(fā)現(xiàn) cargo fix 修改了代碼:

文件名: src/main.rs

fn do_something() {}

fn main() {
    for _i in 0..100 {
        do_something();
    }
}

現(xiàn)在 for 循環(huán)變量變?yōu)?nbsp;_i,警告也不再出現(xiàn)。

cargo fix 命令可以用于在不同 Rust 版本間遷移代碼。版本在附錄 E 中介紹。

通過 clippy 提供更多 lint 功能

clippy 工具是一系列 lint 的集合,用于捕捉常見錯誤和改進 Rust 代碼。

安裝 clippy

$ rustup component add clippy

對任何 Cargo 項目運行 clippy 的 lint:

$ cargo clippy

例如,如果程序使用了如 pi 這樣數(shù)學(xué)常數(shù)的近似值,如下:

文件名: 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 會導(dǎo)致這個錯誤:

error: approximate value of `f{32, 64}::consts::PI` found. Consider using it directly
 --> src/main.rs:2:13
  |
2 |     let x = 3.1415;
  |             ^^^^^^
  |
  = note: #[deny(clippy::approx_constant)] on by default
  = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/master/index.html#approx_constant

這告訴我們 Rust 定義了更為精確的常量,而如果使用了這些常量程序?qū)⒏訙蚀_。如下代碼就不會導(dǎo)致 clippy 產(chǎn)生任何錯誤或警告:

文件名: 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 社區(qū)建議使用 rust-analyzer。這個工具是一組以編譯器為中心的實用程序,它實現(xiàn)了 Language Server Protocol(一個 IDE 與編程語言之間的通信規(guī)范)。rust-analyzer 可以用于不同的客戶端,比如 Visual Studio Code 的 Rust analyzer 插件。

訪問 rust-analyzer 項目的 主頁 來了解如何安裝安裝它,然后為你的 IDE 安裝 language server 支持。如此你的 IDE 便會獲得如自動補全、跳轉(zhuǎn)到定義和 inline error 之類的功能。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號