Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.