Rust-Werkstatt

Werkbank

Notizen

Kurze Notizen zu Dingen, die mir beim Rust-Schreiben aufgefallen sind — Compiler-Eigenheiten, Sprach-Neuerungen, nützliche Werkzeuge. Kein fester Rhythmus: hier kommt dazu, wann's was zu notieren gibt, nicht nach Kalender.

Tooling 17. September 2026

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.

Beispiel aus der Praxis: ein unnötiges .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 clippy prüft die *Bedeutung* und den *Stil* — findet Muster, die zwar kompilieren, aber unidiomatisch, unnötig umständlich oder riskant sind.
  • Beide lassen sich mit --check bzw. -D warnings in eine CI-Pipeline einbauen, ohne dass jemand sie lokal von Hand ausführen muss.

Mehr folgt

Diese Seite wächst unregelmäßig — neue Einträge kommen dazu, wenn mir etwas auffällt, das eine kurze Erklärung wert ist. Kein Abo nötig, kein Feed: einfach ab und zu wieder vorbeischauen, oder direkt zur Startseite zurück.

Wenn du regelmäßig vorbeischaust: Ein Kaffee hält den Server am Laufen und die nächsten Notizen kommen ein Stück schneller.

☕ Kaffee spendieren