Co robi to narzędzie
Formatter Python przepisuje kod Pythona w popularnym stylu Black: spójne wcięcia, spacje wokół operatorów, podwójne cudzysłowy, dwie puste linie między definicjami najwyższego poziomu i długie linie zawijane w sensownych miejscach.
Pod spodem działa formatter z Ruff — szybkiego lintera i formattera Pythona napisanego w Ruście — skompilowany do WebAssembly. Wynik Ruff pokrywa się z Black niemal linia w linię, więc kod sformatowany tutaj nie zostanie ponownie przeformatowany przez hook pre-commit w twoim projekcie.
Jak używać
- Wklej kod Pythona lub otwórz plik
.py. - Sformatowany kod pojawia się po prawej w trakcie pisania.
- Dostosuj opcje, jeśli twój projekt używa innego stylu:
- Wcięcie: 4 spacje to PEP 8 i wartość domyślna; dostępne są też 2 spacje i tabulatory.
- Szerokość linii: 88 to wartość domyślna Black, 79 to limit PEP 8, a 100 lub 120 pasują do szerszych ekranów.
- Cudzysłowy: podwójne, pojedyncze albo bez zmian — tak, jak już używa ich każdy string.
- Respektuj końcowe przecinki: kolekcje kończące się przecinkiem pozostają rozwinięte.
- Skopiuj lub pobierz wynik.
Gdy kodu nie da się sparsować, komunikat błędu pokazuje, gdzie zatrzymał się parser, np. Expected `,`, found `=` w linii 4, a ty możesz przejść prosto do tej linii.
Przykład
Przykład to mały moduł napisany niedbale: importy w jednej linii bez spacji, dataclass ze spacją przed dwukropkiem, metoda wcięta dwiema spacjami i jednoliniowa instrukcja if. Po sformatowaniu każdy blok ma wcięcie czterech spacji, ciało if przechodzi do osobnej linii, operatory dostają spacje, pojedyncze cudzysłowy zmieniają się w podwójne, a między klasą a funkcjami pojawiają się puste linie. Lista zakończona przecinkiem zostaje rozwinięta, po jednym słowniku na linię.
Czego formatter nie robi
Formatowanie zmienia tylko układ. Nie sortuje importów, nie usuwa nieużywanych zmiennych ani niczego nie przemianowuje; to zadania lintera (zajmuje się nimi ruff check --fix). Komentarze i docstringi są zachowywane, a kodu, którego nie da się sparsować, formatter nie zmienia, zamiast zgadywać.
Wskazówki
- Użyj tej samej szerokości linii co w
pyproject.tomltwojego projektu, aby wynik był zgodny z CI. - Sformatowanie fragmentu przed wklejeniem go do pytania lub code review znacznie ułatwia jego czytanie.
- Jeśli kod pochodzi z notatnika lub czatu i miesza tabulatory ze spacjami, formatter ujednolica go w jednym kroku.
FAQ
› Czy wynik jest taki sam jak z Black?
Formatter Ruff zaprojektowano jako bezpośredni zamiennik Black; w dużych, rzeczywistych projektach jego wynik pokrywa się z Black w ponad 99,9% linii. Domyślne ustawienia tutaj (wcięcie 4 spacje, 88 kolumn, podwójne cudzysłowy) to ustawienia domyślne Black.
› Czym jest „magic trailing comma”?
Jeśli lista, wywołanie lub definicja kończy się przecinkiem, Black i Ruff zostawiają ją rozwiniętą, po jednym elemencie na linię, nawet jeśli zmieściłaby się w jednej linii. Wyłącz ten przełącznik, aby takie kolekcje były zwijane, gdy tylko się mieszczą.
› Które wersje Pythona są obsługiwane?
Parser rozumie nowoczesną składnię Pythona 3, w tym instrukcje match, listy parametrów typów i f-stringi z zagnieżdżonymi cudzysłowami. Kod Pythona 2, np. `print "x"`, to błąd składni.
› Czy mój kod jest wysyłany?
Nie. Moduł Ruff WebAssembly pobiera się jednorazowo, a formatowanie działa w twojej przeglądarce.