Ulepsz swój styl kodowania w Pythonie dzięki Ruff


Zdjęcie autorstwa redaktora
Ruff to niezwykle szybki linter i formater Pythona napisany w Rust, którego celem jest zastąpienie i ulepszenie istniejących narzędzi, takich jak Flake8, Black i isort. Zapewnia 10-100x większą wydajność przy zachowaniu parzystości dzięki ponad 700 wbudowanym regułom i ponownej implementacji popularnych wtyczek.

Statystyki z Ruffa | Linting bazy kodu CPython od zera
Ruff obsługuje nowoczesny Python ze zgodnością z wersją 3.12 i `pyproject.toml`. Oferuje także automatyczną obsługę poprawek, buforowanie i integrację edytorów. Ruff jest przyjazny dla monorepo i używany w dużych projektach typu open source, takich jak Pandas, FastAPI i nie tylko. Łącząc szybkość, funkcjonalność i użyteczność, Ruff integruje linting, formatowanie i automatyczne poprawianie w ujednoliconym narzędziu, które jest o rząd wielkości szybsze niż istniejące opcje.
Możemy łatwo zainstalować `ruff` za pomocą PIP.
Aby sprawdzić, jak łatwo i szybko można uruchomić Ruff, możemy skorzystać z repozytorium DagHub kingabzpro/Yoga-Pose-Classification. Możesz go sklonować lub użyć własnego projektu do sformatowania.

Struktura projektu
Najpierw uruchomimy linter nad naszym projektem. Możesz także uruchomić linter na pojedynczym pliku, zastępując „.” z lokalizacją pliku.

Ruff zidentyfikował 9 błędów i 1 błąd możliwy do naprawienia. Aby naprawić błąd, użyjemy flagi –fix.
Jak widać, naprawiono 1 naprawialny błąd.

Do sformatowania projektu użyjemy polecenia `ruff format`.
$ ruff format .
>>> 3 files reformatted
Linter i formater Ruffa dokonały wielu zmian w kodzie. Ale dlaczego potrzebujemy tych narzędzi? Odpowiedź jest prosta – są korzystne w egzekwowaniu standardów i konwencji kodowania. Dzięki temu zarówno Ty, jak i Twój zespół możecie skoncentrować się na istotnych aspektach kodu. Co więcej, pomagają poprawić jakość, łatwość konserwacji i bezpieczeństwo naszego kodu.

Gif autorstwa autora
Aby wykorzystać w projekcie Ruff for Jupyter Notebooks należy utworzyć plik `ruff.toml` i dodać następujący kod:
extend-include = ["*.ipynb"]
Możesz także zrobić to samo z plikiem `pyproject.toml`.
Następnie uruchom ponownie polecenia, aby zobaczyć, jak wprowadza zmiany w plikach notesu Jupyter.
2 pliki zostały sformatowane i mamy 2 pliki Notatnika.
$ ruff format .
>>> 2 files reformatted, 3 files left unchanged
Naprawiliśmy także problemy z tymi plikami, ponownie uruchamiając polecenie `check`.
$ ruff check --fix .
>>> Found 51 errors (6 fixed, 45 remaining).
Efekt końcowy jest niesamowity. Dokonał wszystkich niezbędnych zmian bez łamania kodu.

Gif autorstwa autora
Skonfigurowanie Ruff dla Jupyter Notebooks jest łatwe poprzez edycję pliku `ruff.toml` w celu dostosowania ustawień lintera i formatera. Więcej szczegółów znajdziesz w dokumentacji konfiguracyjnej Ruffa.
target-version = "py311"
extend-include = ["*.ipynb"]
line-length = 80
[lint]
extend-select = [
"UP", # pyupgrade
"D", # pydocstyle
]
[lint.pydocstyle]
convention = "google"
Deweloperzy i zespoły mogą używać Ruffa jako haka przed zatwierdzeniem za pomocą `ruff-pre-commit`:
- repo:
# Ruff version.
rev: v0.1.5
hooks:
# Run the linter.
- id: ruff
args: [ --fix ]
# Run the formatter.
- id: ruff-format
Można go również użyć jako akcji GitHub poprzez `ruff-action`:
name: Ruff
on: [ push, pull_request ]
jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: chartboost/ruff-action@v1
Najbardziej przyjemnym aspektem Ruffa jest rozszerzenie VSCode. Upraszcza formatowanie i linting, eliminując potrzebę stosowania rozszerzeń innych firm. Po prostu wyszukaj Ruff na rynku rozszerzeń, aby je zainstalować.

Obraz z Ruff — Visual Studio Marketplace
Skonfigurowałem plik „setting.json” tak, aby formatował się przy zapisie.
Ruff zapewnia błyskawiczne linting i formatowanie, co zapewnia czystszy i bardziej spójny kod Pythona. Dzięki ponad 700 wbudowanym regułom zaimplementowanym w Rust w celu zwiększenia wydajności, Ruff czerpie inspirację z popularnych narzędzi, takich jak Flake8, isort i pyupgrade, aby egzekwować kompleksowy zestaw najlepszych praktyk kodowania. Wyselekcjonowany zestaw reguł koncentruje się na wychwytywaniu błędów i krytycznych problemów ze stylem bez nadmiernego czepiania się.
Bezproblemowa integracja z hakami przed zatwierdzeniem, akcjami GitHub i edytorami takimi jak VSCode ułatwia włączenie Ruffa do nowoczesnych przepływów pracy w języku Python. Niezrównana szybkość i przemyślanie zaprojektowany zestaw reguł sprawiają, że Ruff jest niezbędnym narzędziem dla programistów Pythona, którzy cenią szybką informację zwrotną, czysty kod i płynną współpracę w zespole. Ruff wyznacza nowy standard lintingu i formatowania w Pythonie, łącząc solidną funkcjonalność z niesamowitą wydajnością.
Abid Ali Awan (@1abidaliawan) to certyfikowany specjalista ds. analityki danych, który uwielbia budować modele uczenia maszynowego. Obecnie koncentruje się na tworzeniu treści i pisaniu blogów technicznych na temat technologii uczenia maszynowego i data science. Abid posiada tytuł magistra w zakresie zarządzania technologią oraz tytuł licencjata w dziedzinie inżynierii telekomunikacyjnej. Jego wizją jest zbudowanie produktu AI wykorzystującego grafową sieć neuronową dla uczniów zmagających się z chorobami psychicznymi.