cargo fmt & cargo clippy erklärt
Zwei Kommandos, die in praktisch jedem Rust-Projekt zur Grundausstattung gehören, aber
unterschiedliche Aufgaben haben: das eine formatiert deinen Code, das andere liest ihn
und macht Verbesserungsvorschläge. Beide gehören zur Standard-Toolchain — nichts davon
musst du extra installieren, wenn rustup schon da ist.
cargo fmt — einheitliche Formatierung
cargo fmt formatiert deinen Code nach einem festen, projektweiten Regelwerk
(Einrückung, Zeilenumbrüche, Leerzeichen um Operatoren, und so weiter) — automatisch, ohne
dass du selbst über Formatierungsfragen nachdenken musst. Das Ergebnis ist deterministisch:
derselbe Code führt bei jedem, der cargo fmt darauf laufen lässt, zum
gleichen Ergebnis. Das beendet ziemlich zuverlässig jede Debatte im Team über
Tabs-vs.-Leerzeichen oder wo die geschweifte Klammer hinkommt.
fn restenergie(kapazitaet:f64,verbrauch_pro_stunde:f64,stunden:f64)->f64{
kapazitaet-verbrauch_pro_stunde*stunden}
wird nach cargo fmt zu:
fn restenergie(kapazitaet: f64, verbrauch_pro_stunde: f64, stunden: f64) -> f64 {
kapazitaet - verbrauch_pro_stunde * stunden
}
Willst du nur prüfen, ob etwas unformatiert ist, ohne es gleich zu ändern (praktisch für
CI-Pipelines) — cargo fmt -- --check gibt einen Fehler zurück, statt still
Dateien zu überschreiben. Eigene Formatierungsvorlieben (z. B. maximale Zeilenlänge)
lassen sich in einer rustfmt.toml im Projektwurzelverzeichnis festlegen.
cargo clippy — mehr als nur Formatierung
cargo clippy geht einen Schritt weiter als der normale Compiler: es prüft
nicht nur, ob dein Code kompiliert, sondern auch, ob er *idiomatisch* ist — also so
geschrieben, wie es in Rust üblich und meistens auch klarer/sicherer ist. Clippy erkennt
typische Anfängermuster und schlägt die idiomatische Alternative direkt vor.
.to_string() vor
einem Funktionsaufruf, der eigentlich mit einer Referenz (&str)
zufrieden wäre, meldet Clippy mit dem Lint clippy::unnecessary_to_owned —
exakt das Anti-Muster „funktional, aber riskant“.
Genau wie cargo fmt lässt sich auch cargo clippy automatisieren:
cargo clippy --all-targets -- -D warnings lässt den Build fehlschlagen, sobald
auch nur eine Clippy-Warnung übrig ist — nützlich für CI, wenn "warnungsfrei" ein
Qualitätsversprechen sein soll, nicht nur eine Empfehlung.
Kurz zusammengefasst
cargo fmtändert die *Formatierung* deines Codes (Whitespace, Zeilenumbrüche) — nie seine Bedeutung.cargo clippyprüft die *Bedeutung* und den *Stil* — findet Muster, die zwar kompilieren, aber unidiomatisch, unnötig umständlich oder riskant sind.- Beide lassen sich mit
--checkbzw.-D warningsin eine CI-Pipeline einbauen, ohne dass jemand sie lokal von Hand ausführen muss.