Python Formatter
Python wie Black neu formatieren - und genau sehen, wie viele Zeilen geändert wurden.
Ihr Code
0 ZeichenFormatiert
Python wie Black neu formatieren - und genau sehen, wie viele Zeilen geändert wurden.
Dieses Tool führt Black aus, den Formatierer, auf den sich die meisten Python-Projekte bereits geeinigt haben, über das, was Sie einfügen, mit der Zeilenlänge und der Anführungszeichen-Behandlung, die Sie wählen. Lässt sich die Datei nicht parsen, wird die betroffene Zeile genannt, und ist sie bereits formatiert, wird auch das gesagt, statt vorzugeben, etwas getan zu haben.
Das Formatieren von Python erfordert nicht, es auszuführen. Der Code wird in einen Syntaxbaum zerlegt und aus diesem Baum neu geschrieben, vollständig im Speicher - er wird nie in eine Datei geschrieben, nie importiert und nie ausgeführt. Ein Formatierer, der ausführen würde, was Sie eingefügt haben, wäre eine Remote-Shell mit einem Textfeld.
Black ist eine AST-erhaltende Transformation: Der Code, der herauskommt, ist dasselbe Programm wie der Code, der hineinkam. Diese Eigenschaft ist der ganze Grund, warum man einem Formatierer vertrauen kann, und sie ist der Grund, warum in diesem Tool nirgendwo ein Sprachmodell beteiligt ist. Ein Modell, das gebeten wird, Code aufzuräumen, wird gelegentlich eine Zeile umschreiben, während es dabei ist, und eine stille Änderung an funktionierendem Code ist der eine Fehler, den sich ein Formatierer nicht leisten kann.
Dieselbe Frage, die CI stellt: Würde sich diese Datei ändern? Der Prüfmodus gibt Ihren Originalcode unverändert zurück und meldet, ob Black ihn reformatiert hätte und um wie viele Zeilen. Es ist der schnelle Weg herauszufinden, warum eine Pipeline bei einer Datei fehlschlägt, die Sie lokal nicht reproduzieren können.
Ein Komma nach dem letzten Element sagt Black, einen Aufruf oder eine Sammlung mit einem Element pro Zeile zu belassen: result = compute(alpha, beta,) kommt als vier Zeilen zurück, alpha, und beta, jeweils in einer eigenen Zeile. Setzen Sie den Haken bei Magisches nachstehendes Komma ignorieren, wird dieselbe Eingabe zu result = compute(alpha, beta), sobald sie in die Zeilenlänge passt. Um einen von Hand ausgerichteten Block wie eine Matrix zu schützen, setzen Sie # fmt: off in die Zeile darüber und # fmt: on darunter; Black lässt alles dazwischen so, wie Sie es geschrieben haben. # fmt: skip am Zeilenende schützt nur diese eine Zeile. Das sind Blacks eigene Kommentare, sie wirken also auch, wenn die CI Ihres Projekts Black ausführt.
Er wird an den Server gesendet, im Speicher formatiert und in derselben Antwort zurückgegeben. Nichts wird auf die Festplatte geschrieben, zwischengespeichert oder protokolliert, und der Nutzungsdatensatz enthält nur Zahlen - Größe, Optionen, wie viele Zeilen sich geändert haben - niemals den Code.
Nein. Black ändert das Layout, nicht das Verhalten, tut aber mehr als Leerzeichen zu verschieben. Es entfernt überflüssige Klammern (aus x = (1) wird x = 1), schreibt Zahlenpräfixe und Exponenten klein (aus 0XABCDEF wird 0xABCDEF, aus 1E5 wird 1e5), setzt ein abschließendes Komma, wenn es einen Aufruf auf mehrere Zeilen verteilt, kürzt Folgen von Leerzeilen und entfernt die Leerzeichen innerhalb eines Docstrings (aus """ Doc. """ wird """Doc."""). Letzteres ändert den Text von __doc__, was nur zählt, wenn Ihr Code seine eigenen Docstrings liest.
Weil sie bei der gewählten Zeilenlänge bereits formatiert war. Das Tool sagt "bereits formatiert", statt stillschweigend eine Kopie zurückzugeben.
Nein. Das Sortieren von Imports ist Aufgabe von isort, nicht von Black, und die beiden sind oft genug unterschiedlicher Meinung, dass es hier Sie überraschen würde.
Das kann kein Formatierer - eine nicht parsbare Datei hat keine Struktur, die umgeschrieben werden könnte. Sie erhalten die Zeile, die Spalte und den umgebenden Code, damit Sie es korrigieren und erneut versuchen können.
Black ist mit PEP 8 kompatibel, mit einer bekannten Abweichung: Die Standardzeilenlänge ist 88 statt 79. Wählen Sie 79 im Zeilenlängen-Auswähler, wenn Sie die strengere Zahl brauchen.
Bis zu 400.000 Zeichen pro Durchlauf. Die Formatierung bricht nach 10 Sekunden ab, was nur sehr große oder stark repetitive Dateien erreichen, und jede IP-Adresse kann 30 Formatierungen pro 10 Minuten ausführen.
Diese Seite verwendet Black, die Version steht auf breiten Bildschirmen in der Kopfzeile der Seite. Black liest die Projekteinstellungen aus pyproject.toml im Abschnitt [tool.black], mit den langen Optionsnamen: line-length = 88 für die gewählte Einstellung "Zeilenlänge", skip-string-normalization = true, wenn Sie "Meine Anführungszeichen beibehalten" angehakt haben, skip-magic-trailing-comma = true für "Magisches nachstehendes Komma ignorieren" und target-version = ["py311"] für einen festen Wert bei "Ziel". Editor-Plugins und der pre-commit-Hook lesen dieselbe Datei. Führen Sie black . zum Formatieren und black --check --diff . in der CI aus: Es ändert nichts und endet mit Code 1, wenn eine Datei umformatiert würde. Pinnen Sie dieselbe Black-Version wie diese Seite, denn die erste Version jedes Kalenderjahres darf den stabilen Stil ändern.
Fast immer, aber nicht Byte für Byte. Der Ruff-Formatierer ist als direkter Ersatz für Black gebaut, und laut Ruff-Dokumentation kommen bei großen, bereits mit Black formatierten Projekten wie Django und Zulip über 99,9 % der Zeilen identisch heraus. Stärker weicht er bei Code ab, der nie durch Black lief, vor allem bei Kommentaren am Zeilenende, und seine Dokumentation listet die beabsichtigten Abweichungen auf. Seine Standard-Zeilenlänge ist ebenfalls 88, einstellbar mit line-length unter [tool.ruff]; quote-style = "preserve" unter [tool.ruff.format] entspricht "Meine Anführungszeichen beibehalten" und skip-magic-trailing-comma = true entspricht "Magisches nachstehendes Komma ignorieren". Wenn Ihre CI ruff format --check ausführt, prüfen Sie die Datei mit Ruff, nicht mit dieser Seite.