Python Formatter
Herformatteer Python zoals Black dat zou doen - en zie precies hoeveel regels er zijn gewijzigd.
Uw code
0 tekensGeformatteerd
Herformatteer Python zoals Black dat zou doen - en zie precies hoeveel regels er zijn gewijzigd.
Dit voert Black uit, de formatter waar de meeste Python-projecten het al over eens zijn, over wat je plakt, met de regellengte en de aanhalingstekenbehandeling die je kiest. Als het bestand niet kan worden geparsed, zegt het op welke regel, en als het al geformatteerd is, zegt het dat ook, in plaats van te doen alsof het iets heeft gedaan.
Python formatteren vereist niet dat het wordt uitgevoerd. De code wordt geparsed in een syntaxisboom en vanuit die boom herschreven, volledig in het geheugen - het wordt nooit naar een bestand geschreven, nooit geïmporteerd en nooit uitgevoerd. Een formatter die zou uitvoeren wat je hebt geplakt, zou een remote shell met een tekstvak zijn.
Black is een AST-behoudende transformatie: de code die eruit komt is hetzelfde programma als de code die erin ging. Die eigenschap is de enige reden waarom je een formatter kunt vertrouwen, en daarom is er nergens in deze tool een taalmodel betrokken. Een model dat gevraagd wordt code op te ruimen, zal af en toe een regel herschrijven terwijl het daarmee bezig is, en een stille wijziging in werkende code is de ene fout die een formatter zich niet kan veroorloven.
Dezelfde vraag die CI stelt: zou dit bestand veranderen? De controlemodus geeft je originele code ongewijzigd terug en meldt of Black het zou hebben geherformatteerd, en met hoeveel regels. Het is de snelle manier om te achterhalen waarom een pipeline faalt op een bestand dat je lokaal niet kunt reproduceren.
Een komma na het laatste element vertelt Black een aanroep of verzameling met één element per regel te houden: result = compute(alpha, beta,) komt terug als vier regels, met alpha, en beta, elk op een eigen regel. Vink Magische afsluitende komma negeren aan en dezelfde invoer wordt result = compute(alpha, beta) zodra die binnen de regellengte past. Om een met de hand uitgelijnd blok zoals een matrix te beschermen, zet je # fmt: off op de regel erboven en # fmt: on eronder; Black laat alles daartussen zoals je het schreef. # fmt: skip aan het eind van een regel beschermt alleen die regel. Dit zijn Blacks eigen commentaren, dus ze blijven werken wanneer de CI van je project Black draait.
Het wordt naar de server gestuurd, in het geheugen geformatteerd en in dezelfde reactie teruggegeven. Niets wordt naar schijf geschreven, gecached of gelogd, en het gebruiksrecord bevat alleen aantallen - grootte, opties, hoeveel regels zijn veranderd - nooit de code.
Nee. Black verandert de opmaak, niet het gedrag, maar doet meer dan spaties verschuiven. Het haalt overbodige haakjes weg (x = (1) wordt x = 1), zet voorvoegsels en exponenten van getallen in kleine letters (0XABCDEF wordt 0xABCDEF, 1E5 wordt 1e5), voegt een afsluitende komma toe als het een aanroep over meerdere regels verdeelt, kort reeksen lege regels in en haalt de spaties binnen een docstring weg (""" Doc. """ wordt """Doc."""). Dat laatste verandert de tekst van __doc__, wat alleen telt als je code zijn eigen docstrings leest.
Omdat het al geformatteerd was op de regellengte die je koos. De tool zegt "al geformatteerd" in plaats van stilletjes een kopie terug te geven.
Nee. Imports sorteren is het werk van isort, niet van Black, en de twee zijn vaak genoeg oneens om je hier te verrassen als het hier zou gebeuren.
Geen formatter kan dat - een niet-parseerbaar bestand heeft geen structuur om te herschrijven. Je krijgt de regel, de kolom en de omliggende code zodat je het kunt corrigeren en opnieuw kunt proberen.
Black is PEP 8-compatibel met één bekende afwijking: de standaard regellengte is 88 in plaats van 79. Kies 79 in de regellengte-keuze als je het strengere cijfer nodig hebt.
Tot 400.000 tekens per keer. Het opmaken stopt na 10 seconden, wat alleen zeer grote of sterk repetitieve bestanden halen, en elk IP-adres kan 30 keer opmaken per 10 minuten.
Deze pagina gebruikt Black, en de versie staat op brede schermen in de kop van de pagina. Black leest de projectinstellingen uit pyproject.toml, onder [tool.black], met de lange optienamen: line-length = 88 voor de gekozen instelling "Regellengte", skip-string-normalization = true als je "Mijn aanhalingstekens behouden" hebt aangevinkt, skip-magic-trailing-comma = true voor "Magische afsluitende komma negeren" en target-version = ["py311"] voor een vaste waarde bij "Doel". Editor-plug-ins en de pre-commit-hook lezen hetzelfde bestand. Draai black . om op te maken en black --check --diff . in CI: het verandert niets en stopt met code 1 als een bestand opnieuw opgemaakt zou worden. Pin dezelfde Black-versie als deze pagina, want de eerste release van elk kalenderjaar mag de stabiele stijl veranderen.
Bijna altijd, maar niet byte voor byte. De Ruff-formatter is gebouwd als directe vervanger van Black, en volgens de Ruff-documentatie komt bij grote, al met Black opgemaakte projecten zoals Django en Zulip meer dan 99,9% van de regels identiek uit. Hij wijkt meer af bij code die nooit door Black is gegaan, vooral bij commentaar aan het eind van een regel, en de documentatie somt de bewuste afwijkingen op. De standaard regellengte is ook 88, in te stellen met line-length onder [tool.ruff]; quote-style = "preserve" onder [tool.ruff.format] komt overeen met "Mijn aanhalingstekens behouden" en skip-magic-trailing-comma = true met "Magische afsluitende komma negeren". Draait je CI ruff format --check, test het bestand dan met Ruff en niet met deze pagina.