Was das Tool macht
Der Python-Formatierer schreibt Python-Code im weit verbreiteten Black-Stil um: einheitliche Einrückung, Leerzeichen um Operatoren, doppelte Anführungszeichen, zwei Leerzeilen zwischen Definitionen auf oberster Ebene und lange Zeilen, die an sinnvollen Stellen umbrochen werden.
Unter der Haube läuft der Formatierer von Ruff, dem schnellen, in Rust geschriebenen Python-Linter und -Formatierer, kompiliert zu WebAssembly. Die Ausgabe von Ruff stimmt fast Zeile für Zeile mit Black überein, daher wird hier formatierter Code vom Pre-Commit-Hook deines Projekts nicht noch einmal umformatiert.
So benutzt du es
- Füge Python-Code ein oder öffne eine
.py-Datei. - Der formatierte Code erscheint schon beim Tippen rechts.
- Passe die Optionen an, wenn dein Projekt einen anderen Stil verwendet:
- Einrückung: 4 Leerzeichen entsprechen PEP 8 und dem Standard; 2 Leerzeichen und Tabs sind verfügbar.
- Zeilenbreite: 88 ist der Standard von Black, 79 das Limit von PEP 8, und 100 oder 120 passen zu breiteren Bildschirmen.
- Anführungszeichen: doppelt, einfach oder die Anführungszeichen beibehalten, die jeder String bereits verwendet.
- Nachgestellte Kommas respektieren: Sammlungen, die mit einem Komma enden, aufgeklappt lassen.
- Kopier das Ergebnis oder lade es herunter.
Lässt sich der Code nicht parsen, zeigt die Fehlermeldung, wo der Parser abgebrochen hat, etwa Expected `,`, found `=` in Zeile 4, und du kannst direkt zu dieser Zeile springen.
Beispiel
Das Beispiel ist ein kleines, nachlässig geschriebenes Modul: Imports in einer Zeile ohne Leerzeichen, eine Dataclass mit einem Leerzeichen vor dem Doppelpunkt, eine mit zwei Leerzeichen eingerückte Methode und eine einzeilige if-Anweisung. Nach dem Formatieren verwendet jeder Block vier Leerzeichen Einrückung, der if-Rumpf wandert in eine eigene Zeile, Operatoren bekommen Leerzeichen, einfache Anführungszeichen werden zu doppelten, und zwischen Klasse und Funktionen werden Leerzeilen eingefügt. Die Liste, die mit einem nachgestellten Komma endete, wird mit einem Dictionary pro Zeile aufgeklappt.
Was der Formatierer nicht macht
Formatieren ändert nur das Layout. Imports werden nicht sortiert, unbenutzte Variablen nicht entfernt und nichts umbenannt; das sind Aufgaben eines Linters (ruff check --fix erledigt sie). Kommentare und Docstrings bleiben erhalten, und Code, den der Formatierer nicht parsen kann, lässt er lieber unverändert, statt zu raten.
Tipps
- Verwende dieselbe Zeilenbreite wie in der
pyproject.tomldeines Projekts, damit das Ergebnis zu deiner CI passt. - Ein Snippet vor dem Posten in einer Frage oder einem Review zu formatieren, macht es viel leichter lesbar.
- Stammt der Code aus einem Notebook oder Chat und mischt Tabs und Leerzeichen, vereinheitlicht der Formatierer das in einem Schritt.
FAQ
› Ist die Ausgabe identisch mit Black?
Der Formatierer von Ruff ist als direkter Ersatz für Black konzipiert und stimmt in großen realen Projekten bei mehr als 99,9 % der Zeilen mit dessen Ausgabe überein. Die Standardeinstellungen hier (4 Leerzeichen Einrückung, 88 Spalten, doppelte Anführungszeichen) sind die Standards von Black.
› Was ist das „magische nachgestellte Komma“?
Endet eine Liste, ein Aufruf oder eine Definition mit einem nachgestellten Komma, lassen Black und Ruff sie mit einem Element pro Zeile aufgeklappt, auch wenn sie in eine Zeile passen würde. Schalte den Schalter aus, um solche Sammlungen zusammenzuziehen, wann immer sie passen.
› Welche Python-Versionen werden unterstützt?
Der Parser versteht moderne Python-3-Syntax, darunter match-Anweisungen, Typparameterlisten und f-Strings mit verschachtelten Anführungszeichen. Python-2-Code wie `print "x"` ist ein Syntaxfehler.
› Wird mein Code hochgeladen?
Nein. Das Ruff-WebAssembly-Modul wird einmal heruntergeladen, und das Formatieren läuft in deinem Browser.