Зараз читаютьПрактичні новини про код, AI та технології — без інформаційного шуму

Ruff 0.16.7 виправив небезпечні autofix і прискорив конфігурацію Python-проєктів

Свіжий Ruff коректніше працює з docstring, вкладеними лапками та імпортами, готується до Python 3.15 і швидше розв’язує успадковані налаштування.

Ruff 0.16.7 виправив небезпечні autofix і прискорив конфігурацію Python-проєктів

Ruff 0.16.7 зосередився на точності автоматичних виправлень, сумісності з Python 3.15 і продуктивності конфігурації. У релізі немає великої зміни командного інтерфейсу, зате є кілька виправлень, які безпосередньо впливають на безпечність запуску ruff check --fix у CI та редакторі.

Редакційна ілюстрація аналізу синтаксичних дерев Python лінтером
Редакційна AI-ілюстрація bib.com.ua; вона не є інтерфейсом Ruff і не входить до release notes.

Autofix не повинен непомітно створювати docstring

Для правила ISC003 з набору flake8-implicit-str-concat виправлення тепер позначається як unsafe, якщо його результатом стає docstring. У Python перший рядковий літерал у модулі, класі або функції має семантичне значення: він потрапляє у __doc__ і може використовуватися генераторами документації, introspection та тестами.

Механічне об’єднання рядків, яке перетворює звичайний літерал на docstring, — це вже не суто форматування. Нова класифікація дозволяє стандартному safe-fix режиму не змінювати поведінку програми без явної згоди розробника.

Імпорти та вкладені format spec

Правило TID254 більше не пропонує виправлення для імпортів із кількома елементами. Такі конструкції складніші за одиночний import: автоматичне перенесення або заміна одного члена може змінити сортування, коментарі чи структуру alias. Лінтер може повідомити проблему, але не повинен удавати, що будь-яке перетворення безпечне.

Парсер виправив роботу з альтернативними вкладеними лапками всередині format spec interpolation. Це крайовий випадок f-string, де лексичний контекст залежить від кількох рівнів лапок та фігурних дужок. Для проєктів, які генерують складні форматовані рядки, зменшується ризик хибної синтаксичної помилки або некоректного перезапису.

Підготовка до Python 3.15

Діагностику ImportCycleError для правила PLW0133 обмежено Python 3.15, де вона актуальна. Ruff також перестав визначати __cached__ для цієї версії мови та більше не рекомендує видалений typing.no_type_check_decorator у правилі UP035. Такі зміни важливі для multi-version проєктів: правило повинно відповідати target version, а не найновішій семантиці без урахування конфігурації.

Типи slice і frozendict тепер розпізнаються як generics у відповідних перевірках. Окремо виправлено повідомлення про конфлікт правил документації D211 і D203, щоб користувач отримував точну підказку, а не плутався в несумісних налаштуваннях.

Нові preview-перевірки

Експериментальне правило RUF077 шукає default values у параметрах, що представляють receiver методу. Ще дві перевірки, RUF039 та RUF055, навчилися розпізнавати re.prefixmatch. Оскільки правила preview, їх не варто безконтрольно вмикати як blocking gate для всього monorepo: спочатку слід оцінити результати та зафіксувати версію.

Швидший старт у великих репозиторіях

Ruff повторно використовує lookup імен у parser interning та швидше розв’язує успадковані конфігурації. Друга оптимізація особливо цікава monorepo з багатьма pyproject.toml і extend: час аналізу складається не лише з обходу AST, а й з побудови ефективних правил для кожного шляху.

  • Оновити Ruff на окремій CI-гілці й порівняти набір diagnostics.
  • Переглянути unsafe fixes вручну, особливо зміни рядкових літералів та імпортів.
  • Явно задати target-version для проєктів, які ще не переходять на Python 3.15.
  • Preview rules спочатку запускати у report-only режимі.

До shell installer також додано вбудовані контрольні суми архівів. Це покращує перевірку завантаження, однак у production CI надійніше використовувати зафіксований binary, package hash або перевірені artifact attestations.

Висновок: 0.16.7 варто розглядати як реліз якості. Він зменшує ризик надмірно сміливого autofix і уточнює аналіз нових конструкцій Python без штучного розширення набору помилок для старих target versions.

Першоджерело:Ruff Releases ↗
Автор:Astral та учасники Ruff
Ліцензія:MIT License ↗

Матеріал перекладено, переказано та доповнено редакцією українською мовою.

</>

Читайте далі — ми вже розбираємо наступну важливу тему.

Далі за темою

Схожі матеріали