Dodatek D: Przydatne narzędzia deweloperskie
W tym dodatku omówimy kilka przydatnych narzędzi deweloperskich, które udostępnia projekt Rust. Przyjrzymy się automatycznemu formatowaniu, szybkim sposobom stosowania poprawek ostrzeżeń, linterowi oraz integracji z IDE.
Automatyczne formatowanie z rustfmt
Narzędzie rustfmt formatuje twój kod zgodnie ze społecznościowym stylem kodu. Wiele projektów współpracujących używa rustfmt, aby zapobiec sporom o to, jaki styl zastosować podczas pisania w Rust: każdy formatuje swój kod za pomocą narzędzia.
Instalacje Rust domyślnie zawierają rustfmt, więc powinieneś już mieć programy rustfmt i cargo-fmt w swoim systemie. Te dwa polecenia są analogiczne do rustc i cargo w tym sensie, że rustfmt pozwala na bardziej szczegółową kontrolę, a cargo-fmt rozumie konwencje projektu używającego Cargo. Aby sformatować dowolny projekt Cargo, wpisz następujące polecenie:
$ cargo fmt
Uruchomienie tego polecenia formatuje cały kod Rust w bieżącej skrzynce. Powinno to zmienić tylko styl kodu, a nie semantykę kodu. Aby uzyskać więcej informacji o rustfmt, zobacz jego dokumentację.
Napraw swój kod za pomocą rustfix
Narzędzie rustfix jest dołączone do instalacji Rust i może automatycznie naprawiać ostrzeżenia kompilatora, które mają jasny sposób rozwiązania problemu, który jest prawdopodobnie tym, czego chcesz. Prawdopodobnie widziałeś już ostrzeżenia kompilatora. Na przykład, rozważ ten kod:
Nazwa pliku: src/main.rs
fn main() {
let mut x = 42;
println!("{x}");
}
Tutaj definiujemy zmienną x jako zmienną, ale nigdy jej faktycznie nie modyfikujemy. Rust ostrzega nas o tym:
$ cargo build
Kompilowanie myprogram v0.1.0 (file:///projects/myprogram)
warning: zmienna nie musi być mutowalna
--> src/main.rs:2:9
|
2 | let mut x = 0;
| ----^
| |
| pomoc: usuń to `mut`
|
= note: `#[warn(unused_mut)]` domyślnie włączone
Ostrzeżenie sugeruje, aby usunąć słowo kluczowe mut. Możemy automatycznie zastosować tę sugestię za pomocą narzędzia rustfix, uruchamiając polecenie cargo fix:
$ cargo fix
Sprawdzanie myprogram v0.1.0 (file:///projects/myprogram)
Naprawianie src/main.rs (1 poprawka)
Zakończono dev [nieoptymalny + debuginfo] cel(e) w 0.59s
Kiedy ponownie spojrzymy na src/main.rs, zobaczymy, że cargo fix zmienił kod:
Nazwa pliku: src/main.rs
fn main() {
let x = 42;
println!("{x}");
}
Zmienna x jest teraz niezmienna, a ostrzeżenie już się nie pojawia.
Możesz również użyć polecenia cargo fix, aby przetransformować swój kod między różnymi edycjami Rust. Edycje są omówione w Dodatku E.
Więcej lintów z Clippy
Narzędzie Clippy to zbiór lintów do analizowania kodu, dzięki czemu możesz wyłapać typowe błędy i ulepszyć swój kod w Rust. Clippy jest dołączone do standardowych instalacji Rust.
Aby uruchomić lintery Clippy w dowolnym projekcie Cargo, wpisz następujące polecenie:
$ cargo clippy
Na przykład, powiedzmy, że piszesz program, który używa przybliżenia stałej matematycznej, takiej jak pi, jak ten program:
fn main() {
let x = 3.1415;
let r = 8.0;
println!("powierzchnia koła wynosi {}", x * r * r);
}
Uruchomienie cargo clippy w tym projekcie powoduje następujący błąd:
błąd: znaleziono przybliżoną wartość `f{32, 64}::consts::PI`
--> src/main.rs:2:13
|
2 | let x = 3.1415;
| ^^^^^^
|
= note: `#[deny(clippy::approx_constant)]` domyślnie włączone
= help: rozważ użycie stałej bezpośrednio
= help: więcej informacji znajdziesz na https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant
Ten błąd informuje, że Rust ma już zdefiniowaną bardziej precyzyjną stałą PI, i że twój program byłby bardziej poprawny, gdybyś zamiast tego użył tej stałej. Następnie zmieniłbyś swój kod, aby używać stałej PI.
Poniższy kod nie powoduje żadnych błędów ani ostrzeżeń z Clippy:
fn main() {
let x = std::f64::consts::PI;
let r = 8.0;
println!("powierzchnia koła wynosi {}", x * r * r);
}
Aby uzyskać więcej informacji o Clippy, zobacz jego dokumentację.
Integracja z IDE za pomocą rust-analyzer
Aby pomóc w integracji z IDE, społeczność Rust zaleca używanie rust-analyzer. To narzędzie to zestaw narzędzi zorientowanych na kompilator, które komunikują się za pomocą Language Server Protocol, czyli specyfikacji komunikacji między IDE a językami programowania. Różni klienci mogą używać rust-analyzer, np. wtyczka Rust analyzer dla Visual Studio Code.
Odwiedź stronę główną projektu rust-analyzer, aby zapoznać się z instrukcjami instalacji, a następnie zainstaluj obsługę serwera języka w swoim IDE. Twoje IDE zyska takie możliwości jak autouzupełnianie, skok do definicji i wbudowane błędy.