programmatūra · 5 min · 26.07.2026

Ruff 0.16.0 ieslēdz 413 likumus pēc noklusējuma, agrāk bija 59

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 | None vietā 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 if blokiem 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ā pirms import 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.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie