cargo check în Rust

Cargo și rustup Cargo 1.16

Verifică dacă proiectul se compilează (tipuri, borrow checker) fără să producă executabilul. Este mult mai rapid decât cargo build.

Sintaxă
cargo check
cargo check --all-targets     # include testele și exemplele
cargo check --release

Ce face cargo check

cargo check parcurge toate etapele compilării care pot găsi erori – analiza sintaxei, verificarea tipurilor, borrow checker-ul – dar sare peste generarea codului mașină. De aceea este de câteva ori mai rapid decât cargo build.

Îl folosești des în timp ce scrii cod, ca să vezi erorile cât mai repede. Editoarele (prin rust-analyzer) fac o verificare asemănătoare la fiecare salvare.

--all-targets verifică și testele, exemplele și benchmark-urile, care altfel nu sunt compilate. Dacă vrei să și rulezi programul, ai nevoie tot de cargo build sau cargo run.

Exemple

Exemplul 1: Verificare fără erori

Cuvântul este „Checking”, nu „Compiling”, și durează doar câteva sutimi de secundă.

$ cargo check

Rezultat în terminal

Checking salut v0.1.0 (/home/ana/proiecte/salut)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.07s

Exemplul 2: Verificare cu o eroare de tip

Aceeași eroare pe care ar da-o cargo build, găsită fără compilarea completă.

// src/main.rs
fn main() {
    let varsta: u32 = "17";
    println!("Vârsta: {varsta}");
}

$ cargo check

Rezultat în terminal

    Checking salut v0.1.0 (/home/ana/proiecte/salut)
error[E0308]: mismatched types
 --> src/main.rs:2:23
  |
2 |     let varsta: u32 = "17";
  |                 ---   ^^^^ expected `u32`, found `&str`
  |                 |
  |                 expected due to this

For more information about this error, try `rustc --explain E0308`.
error: could not compile `salut` (bin "salut") due to 1 previous error

Greșeli frecvente

  • Crezi că cargo check fără erori înseamnă că programul funcționează. Verifică doar compilarea; logica se verifică cu teste (cargo test).
  • Cauți executabilul după cargo check: nu există. Pentru executabil folosește cargo build.

Comenzi înrudite

  • cargo build: Compilează proiectul și dependențele lui. Executabilul ajunge în target/debug/ sau, cu –release, optimizat în target/release/.
  • cargo clippy: Analizează codul cu sute de reguli (lints) și semnalează greșeli frecvente, cod ineficient sau neidiomatic, cu sugestii de corectare.
  • cargo test: Compilează proiectul în mod test și rulează toate testele: cele #[test], testele din tests/ și exemplele din documentație.