Python linteris Ruff 23. jūlijā ieguva versiju 0.16.0, kurā pēc noklusējuma ieslēgti 413 likumi. Iepriekš to bija 59. Kas atjaunina Ruff bez stingras versijas piesaistes, nākamajā ruff check palaišanā ieraudzīs simtiem jaunu brīdinājumu kodā, kurā nekas nav mainīts.
Noklusējuma kopa stāvēja neaiztikta kopš versijas 0.1.0. Tolaik Ruff bija 708 likumi, tagad 968. Astral, uzņēmums, kas Ruff uztur, no tiem atlasīja 413 un pārējos atstāja brīvprātīgai izvēlei. Laidiena pieteikumā Astral atlases kritēriju formulē vienkārši: likumi, kas ķer sintakses kļūdas un tūlītējas izpildlaika avārijas.
Ruff ir rakstīts Rust valodā un aizstāj flake8, isort un daļu pylint funkciju vienā izpildfailā. GitHub repozitorijam ir ap 48 800 zvaigžņu, tāpēc noklusējuma maiņa skar lielu daļu Python projektu, kuriem CI failā stāv vienkāršs ruff check bez tālākiem iestatījumiem.
Ko Ruff tagad pārbauda bez konfigurācijas
Vecā noklusējuma izvēle bija ["E4", "E7", "E9", "F"]: trīs pycodestyle apakšgrupas plus Pyflakes. Tā ķēra sintakses kļūdas, neizmantotus importus un nedefinētus mainīgos. Ar to viss beidzās. Jaunajā kopā ietilpst veselas kategorijas, ko līdz šim vajadzēja pieprasīt ar roku:
- flake8-bugbear (B): 29 likumi, starp tiem maināmi noklusējuma argumenti funkciju definīcijās;
- pyupgrade (UP): 42 likumi, kas piedāvā jaunāku sintaksi, piemēram
X | NonevietāOptional[X]; - pylint (PL): 67 likumi par konvencijām, kļūdām un pārrakstīšanas iespējām;
- flake8-simplify (SIM): 21 likums par ligzdotiem
ifblokiem un liekiem salīdzinājumiem; - Ruff paša RUF kategorija: 36 likumi, tostarp maināmi klases mainīgie.
Sadalījumu pa kategorijām apkopojis pydevtools: kopā 413 likumi 34 kategorijās, tas ir 354 vairāk nekā agrāk.
Kā iesaldēt veco uzvedību
Kas negrib pāriet uzreiz, atgriež iepriekšējo kopu ar vienu rindu pyproject.toml failā: select = ["E4", "E7", "E9", "F"] sadaļā [tool.ruff.lint]. Pēc tam Ruff uzvedas tāpat kā 0.15 sērijā.
Pakāpeniskai pārejai der viena kategorija reizē: ruff check --select B . parāda tikai bugbear atradumus. Lielākajai daļai UP pārkāpumu ir automātiskie labojumi, tāpēc ruff check --fix tos aizver bez manuāla darba. Uzmanība vajadzīga tiem, kas konfigurācijā jau lieto extend-select. Jaunie noklusējumi ieslēdz tikai daļu no katras kategorijas, tāpēc rindas izmešana var klusi izslēgt likumus, kas līdz šim strādāja.
Django līdzautoram nokrita CI
Simon Willison, viens no Django veidotājiem, apraksta, ka jaunā kopa salauza viņa CI darbus, jo vienā projektā Ruff versija nebija piesaistīta. Atradumus viņš sauc par simtiem sīku problēmu un pašu pāreju par diezgan drošu, jo projektus klāj testi uz Python 3.10 līdz 3.14. Ruff paskaidrojumi katram atradumam viņam noderēja citādi, nekā gaidīts:
Šis izvads satur visu, kas kodēšanas aģentam vajadzīgs, lai problēmas izlabotu.
Lielu daļu jauno atradumu tāpēc var nodot mašīnai. ruff check --fix daļu aizver pats, pārējos labo aģents pēc Ruff paskaidrojuma. Bez tā 400 brīdinājumu izskatīšana prasītu dienu roku darba.
Markdown formatēšana un jauni klusēšanas komentāri
ruff format tagad formatē Python kodu Markdown failos. Tas attiecas uz nožogotiem blokiem ar info virkni python, py, python3, py3, pyi, pycon vai {python}, tātad arī uz Quarto piezīmju grāmatām. Atsevišķu bloku var izlaist ar fmt: off un fmt: on komentāriem vai HTML komentāru pāri.
Klusēšanas komentāru klāsts kļuva plašāks. Līdzās vecajam ruff: disable un ruff: enable pārim tagad darbojas ruff: ignore, kas strādā kā noqa: rindas galā vai rindā pirms diagnostikas. Abi šie varianti apklusina vienu un to pašu brīdinājumu:
import math # ruff: ignore[F401]# ruff: ignore[F401]rindā pirmsimport os
Visam failam ir ruff: file-ignore. Komentārus var arī neierakstīt ar roku: karogs --add-ignore tos ieliek pats. Pēc vienādības zīmes tam var padot iemeslu, kas nonāk komentārā. Priekšskatījuma režīmā komentāros drīkst rakstīt likuma nosaukumu, ne tikai kodu.
Abas komandas check un format --check tagad izvadā parāda pieejamo labojumu diff, tāpēc atsevišķs --diff karogs vairs nav vajadzīgs. format --check ieguva visus izvada formātus: JSON, GitHub anotācijas, GitLab un pārējos.
Sīkums, kas var salauzt skriptus
JSON diagnostikā lauki filename, location un labojumu pozīcijas tagad var būt null, kur agrāk bija tukša virkne vai noklusējuma vērtība. Skriptus, kas šo izvadu apstrādā, vērts pārbaudīt pirms atjaunināšanas.
No priekšskatījuma statusa iznāca divpadsmit likumi. Starp tiem ir too-many-positional-arguments (PLR0917), missing-copyright-notice (CPY001), sorted-min-max (FURB192) un duplicate-entry-in-dunder-all (RUF068). Pirmais no tiem brīdina par funkcijām ar pārāk daudz pozicionālo argumentu, tāpēc vecākā kodā tas var iedegties bieži.
Mainījās arī dažu likumu uzvedība. blind-except (BLE001) vairs nesūdzas, ja izņēmums tiek žurnalēts ar kādu logging metodi ārpus critical, error vai exception. future-required-type-annotation (FA102) tagad pārbauda arī PEP 585 saderīgas saskarnes no collections.abc. Likumi INT001 līdz INT003 atrod vairāk gettext lietojumu, tostarp gadījumu, kad modulis piesaistīts builtins._ vārdam. Drošības likums suspicious-url-open-usage (S310) tagad izseko lokālas virkņu piesaistes, kas samazina viltus atradumu skaitu.
Ruff 0.16.0 uzstādāms ar pip install ruff==0.16.0 vai uv tool install ruff. Iepriekšējā versija 0.15.22 iznāca 16. jūlijā, nedēļu pirms šī laidiena.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.