Generator konfiguracji Ruff
Sekcja [tool.ruff] do pyproject.toml: reguły, wersja i format
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator konfiguracji Ruff dla Pythona
Generator Ruff tworzy gotową sekcję [tool.ruff] do pyproject.toml. Wybierasz docelową wersję Pythona, długość linii i zestaw reguł, a narzędzie dopisuje też sekcję formattera.
Czym jest Ruff?
Ruff to linter i formatter Pythona napisany w Rust — kilkadziesiąt razy szybszy od Flute8 czy isort, z setkami reguł kompatybilnych z ekosystemem. Konfiguracja mieszka w pyproject.toml, więc nie potrzebujesz osobnych plików setup.cfg czy .flake8.
| Kod reguł | Zakres |
|---|---|
| E, F | błędy składniowe pyflakes i pycodestyle — podstawa |
| I | porządek importów (zamiennik isort) |
| UP | modernizacja do nowszych wersji Pythona |
| B | typowe błędy logiczne (flake8-bugbear) |
| SIM | upraszczanie warunków i pętli |
Długość linii i formatter
Domyślna długość linii Ruff to 88 znaków — standard Blacka. Zespół może ustawić 100 lub 120, jeśli tak redagują kod. Sekcja [tool.ruff.format] włącza formatter zgodny z Blackiem: podwójne cudzysłowy i deterministyczny układ kodu, co kończy dyskusje o formatowaniu w code review.
Jak działa generator konfiguracji Ruff
Generator nie zgaduje — każde ustawienie z formularza mapuje wprost na konkretny klucz w pliku pyproject.toml. Wybrana wersja Pythona trafia do klucza target-version, długość linii do line-length, a zaznaczone grupy reguł do listy select. Jeśli włączysz formatter, narzędzie dopisuje drugą sekcję, [tool.ruff.format], która działa niezależnie od listy reguł lintera. Wszystko ląduje w jednym pliku, więc nie powstają dodatkowe setup.cfg czy .flake8.
Długość linii jest wspólna dla obu etapów pracy Ruffa. Ta sama wartość — 88, 100 albo 120 — decyduje o tym, kiedy linter zgłosi przekroczenie linii, i o tym, jak formatter zawija kod. Ustawienie tych wartości rozłącznie kończy się sytuacją, w której formatter łamie linię, a linter i tak ją zgłasza, dlatego generator trzyma jedną liczbę w obu miejscach.
Grupy reguł są oznaczone krótkimi kodami literowymi i każdy kod to osobny zestaw sprawdzeń. Zaznaczenie grupy w formularzu to dopisanie jej kodu do listy select — nic więcej się za tym nie kryje, a kolejność kodów na liście nie zmienia działania lintera.
Przykład krok po kroku
- Wybierasz docelową wersję Pythona — na przykład 3.12, co w pliku zapisuje się jako target-version = "py312". Od tej wartości zależy zestaw reguł modernizujących (grupa UP).
- Ustawiasz długość linii na 100. Domyślne 88 zostaje zastąpione, a różnica wynosi 12 znaków na rzecz dłuższych linii.
- Zaznaczasz sześć grup reguł: E, F, I, UP, B oraz SIM. Każda z nich dopisuje jeden kod do listy select, więc w pliku pojawia się lista sześciu elementów.
- Włączasz formatter. Generator dopisuje drugą sekcję, [tool.ruff.format], z ustawieniami zgodnymi z Blackiem — podwójne cudzysłowy i deterministyczny układ kodu.
- Wynik to gotowa sekcja [tool.ruff] z target-version, line-length i select oraz sekcja [tool.ruff.format] — łącznie dwie sekcje i jedna lista reguł. Wklejasz je do pyproject.toml i uruchamiasz ruff check, a potem ruff format.
Tabela referencyjna reguł i ustawień
| Element konfiguracji | Co obejmuje | Kiedy włączyć |
|---|---|---|
| E | błędy pycodestyle — styl i składnia, w tym przekroczenie długości linii | zawsze, to podstawa konfiguracji |
| F | błędy pyflakes — nieużywane importy, niezdefiniowane nazwy | zawsze, łapie realne błędy, nie kosmetykę |
| I | porządek importów, zamiennik isort | gdy kod ma wielu autorów albo importy rosną |
| UP | modernizacja składni do nowszej wersji Pythona | gdy target-version jest wyższy niż stary kod w repo |
| B | typowe błędy logiczne z flake8-bugbear | gdy chcesz wyłapać pułapki, których nie widzi E i F |
| SIM | upraszczanie warunków i pętli | gdy zależy ci na czytelności, nie tylko na poprawności |
| line-length | domyślnie 88, zespoły ustawiają 100 lub 120 | gdy zespół ma własny standard redakcji kodu |
| [tool.ruff.format] | formatter zgodny z Blackiem, podwójne cudzysłowy | gdy chcesz zakończyć spory o formatowanie w code review |
Praktyczne wskazówki
- Zacznij od E i F. Te dwie grupy nie wymagają zmian w stylu pisania i niemal zawsze przechodzą na istniejącym kodzie, więc nadają się na pierwszy commit z Ruffem.
- Dodaj I i UP od razu. Porządek importów i modernizacja składni rzadko psują działający kod, a oszczędzają ręcznej pracy przy każdym nowym pliku.
- Trzymaj jedną długość linii. Jeśli wpiszesz 100, nie zostawiaj formattera na 88 — rozjazd tych dwóch wartości powoduje walkę narzędzi o ten sam fragment kodu.
- Nie włączaj wszystkiego naraz. Każda grupa reguł to potencjalnie setki zgłoszeń w istniejącym repo. Dodawaj je partiami, żeby dało się przejrzeć wynik.
- Uruchamiaj fix przed formatem. Najpierw ruff check --fix porządkuje kod zgodnie z regułami, potem ruff format ustala układ — odwrotna kolejność zmusza formatter do powtórnej pracy.
Ograniczenia narzędzia
- Nie analizuje twojego kodu. Generator wypisuje konfigurację na podstawie wybranych opcji i nie wie, ile zgłoszeń pojawi się po jej włączeniu w twoim projekcie.
- Nie ustawia wyjątków per plik. Sekcje typu per-file-ignores, wyłączanie pojedynczych reguł czy ignorowanie katalogów musisz dopisać ręcznie, jeśli są potrzebne.
- Nie sprawdza kontekstu projektu. Nie wie, czy w repo działa już Black, isort albo flake8, więc nie wykryje konfliktu między dwoma formatterami ani podwójnego porządkowania importów.
- Nie weryfikuje wersji Ruffa. Nazwy kluczy i dostępne grupy reguł zmieniają się między wydaniami, więc wynik warto porównać z dokumentacją wersji, którą masz zainstalowaną.
Najczęstsze pytania
Czy Ruff zastąpi Flake8 i isort?
Tak — pokrywa większość ich reguł i działa znacznie szybciej. Migracja zwykle sprowadza się do przeniesienia wybranych reguł do select w pyproject.toml.
Jakie reguły wybrać na start?
Zestaw E, F jest bezpieczny dla każdego projektu. Importy (I) i modernizacja (UP) zwykle nie psują kodu, więc warto dodać je od razu.
Czy Ruff naprawia błędy automatycznie?
Tak, dla wielu reguł działa ruff --fix — np. porządkuje importy i usuwa nieużywane. Formatter uruchamiasz komendą ruff format.
Czym różni się select od extend-select w konfiguracji Ruffa?
Select zastępuje domyślny zestaw reguł, a extend-select dokłada reguły do zestawu domyślnego. Generator podaje gotową listę w select, więc jeśli chcesz zachować domyślne reguły Ruffa i tylko coś dołożyć, przepisz listę do extend-select.
Jaką wartość line-length wybrać — 88, 100 czy 120?
88 to domyślna wartość Ruffa i standard Blacka, więc nic nie musisz zmieniać. Wartości 100 i 120 mają sens tylko wtedy, gdy cały zespół faktycznie tak redaguje kod — inaczej formatter będzie zawijał linie wbrew przyzwyczajeniom autorów.
Czy generator obsługuje reguły spoza listy E, F, I, UP, B i SIM?
Nie — narzędzie oferuje właśnie te grupy. Pozostałe reguły możesz dopisać ręcznie w select, dopisując ich kody do wygenerowanej listy.
Czy konfigurację Ruffa można trzymać poza pyproject.toml?
Tak, Ruff czyta też dedykowany plik ruff.toml oraz .ruff.toml. Generator tworzy jednak sekcję [tool.ruff] do pyproject.toml, żeby cała konfiguracja projektu została w jednym pliku.
Czy po wklejeniu konfiguracji trzeba jeszcze coś zmienić w projekcie?
Sama sekcja nic nie zmienia, dopóki nie uruchomisz ruff check albo ruff format. Warto też dodać wywołanie Ruffa do skryptu CI lub hooka przed commitem, inaczej konfiguracja zostanie niewykorzystana.