cargo fmt în Rust

Cargo și rustup rustfmt 1.0 (componenta rustfmt, instalată implicit de rustup)

Formatează automat tot codul proiectului după stilul oficial Rust (indentare, spații, acolade), cu rustfmt.

Sintaxă
cargo fmt                # formatează tot proiectul
cargo fmt --check        # doar verifică, afișează diferențele
# reguli proprii: rustfmt.toml în rădăcina proiectului

Ce face cargo fmt

cargo fmt rulează rustfmt pe toate fișierele proiectului și le rescrie în stilul standard: 4 spații de indentare, spații în jurul operatorilor, acolade pe aceeași linie, linii de cel mult 100 de caractere. Așa tot codul Rust arată la fel, iar discuțiile despre stil dispar.

cargo fmt --check nu modifică nimic: afișează diferențele și se termină cu cod de eroare dacă ceva nu este formatat. Este forma folosită în CI.

Câteva reguli se pot schimba într-un fișier rustfmt.toml (de exemplu max_width = 120), dar majoritatea proiectelor păstrează stilul implicit. Majoritatea editoarelor pot rula formatarea la fiecare salvare.

Exemple

Exemplul 1: Verificare și formatare

--check arată cu - liniile vechi și cu + pe cele formatate. După cargo fmt, fișierul a fost rescris.

// src/main.rs înainte
fn main(){
    let orase=vec!["Iași","Cluj","Brașov"];
  for oras in &orase { println!("{}",oras); }
}

$ cargo fmt --check
$ cargo fmt
$ cat src/main.rs

Rezultat în terminal

Diff in /home/ana/proiecte/salut/src/main.rs:1:
-fn main(){
-    let orase=vec!["Iași","Cluj","Brașov"];
-  for oras in &orase { println!("{}",oras); }
+fn main() {
+    let orase = vec!["Iași", "Cluj", "Brașov"];
+    for oras in &orase {
+        println!("{}", oras);
+    }
 }

fn main() {
    let orase = vec!["Iași", "Cluj", "Brașov"];
    for oras in &orase {
        println!("{}", oras);
    }
}

Exemplul 2: Reguli proprii în rustfmt.toml

Fișierul stă în rădăcina proiectului, lângă Cargo.toml. cargo fmt îl citește automat.

# rustfmt.toml
max_width = 120
use_small_heuristics = "Max"
newline_style = "Unix"

Efect

Liniile pot avea până la 120 de caractere, expresiile scurte rămân pe o singură linie, iar fișierele folosesc sfârșit de linie Unix (\n).

Greșeli frecvente

  • Primești cargo-fmt is not installed: componenta lipsește din toolchain. Instaleaz-o cu rustup component add rustfmt.
  • Formatezi de mână și apoi te cerți cu formatorul. Lasă cargo fmt să decidă și rulează-l înainte de fiecare commit.

Comenzi înrudite

  • cargo clippy: Analizează codul cu sute de reguli (lints) și semnalează greșeli frecvente, cod ineficient sau neidiomatic, cu sugestii de corectare.
  • rustup: Instalează și actualizează Rust: compilatorul, Cargo și componentele lor, în mai multe versiuni (stable, beta, nightly) și pentru mai multe sisteme.
  • cargo check: Verifică dacă proiectul se compilează (tipuri, borrow checker) fără să producă executabilul. Este mult mai rapid decât cargo build.