Voydevich
Ruff

Що нового в Ruff 0.17

Реліз приніс підписання виконуваних файлів для macOS і Windows, оновлення стандартних версій Python, вилучення підтримки ruff-lsp та низку стабілізованих правил.

Реліз від 9 жовтня 2026 · оновлено 8 листопада 2026

Головне

  • Бінарні файли для macOS і Windows тепер мають цифровий підпис
  • Версія Python за замовчуванням змінена на 3.11, перевірка синтаксису — на 3.15
  • Вилучено застарілий мовний сервер ruff-lsp на користь нативного сервера
  • Стабілізовано правила TID254, TID255 та RUF071
  • CLI показує небезпечні виправлення за замовчуванням у форматі full

Коротко

Ruff 0.17 додає цифровий підпис для збірок під macOS і Windows та переводить стандартну версію Python на 3.11 (і 3.15 для синтаксичних перевірок без явної конфігурації). Крім того, реліз остаточно вилучає застарілий ruff-lsp, стабілізує кілька правил і поведінку розрахунку довжини рядка, а також оптимізує швидкодію парсингу та форматування.

Нові можливості

Підписання виконуваних файлів

Виконувані файли в архівах релізів для macOS і Windows, а також у wheel-пакетах ruff, тепер мають цифровий підпис коду:

  • Бінарні файли для macOS підписані сертифікатом Apple Developer ID і нотаріально завірені Apple.
  • Бінарні файли для Windows містять підписи Authenticode із міткою часу від Azure Artifact Signing.

Це забезпечує перевірку видавця й цілісності файлів, дозволяє налаштовувати білі списки на основі видавця та має зменшити кількість попереджень безпеки й хибних спрацьовувань антивірусів.

Стабілізація правил та форматування

Зі статусу preview перейшли у стабільний стан наступні правила:

  • lazy-import-mismatch (TID254)
  • lazy-import-immediately-resolved (TID255)
  • os-path-commonprefix (RUF071)

Також стабілізовано поведінку: форматер, правила unsorted-imports (I001), line-too-long (E501) та doc-line-too-long (W505) тепер послідовно ігнорують кінцеві pragma-коментарі під час підрахунку довжини рядка. Це усунуло помилки їхньої взаємодії, але може призвести до переформатування наявних імпортів.

Нові конфігурації та правила в preview

  • Для правила magic-value-comparison (PLR2004) додано конфігурований allowlist.
  • Додано нові preview-правила: unnecessary-regular-expression-compile у групі complexity, shared-clock-mock у suspicious та tarfile-ignore-zeros-true у security.
  • Правило pyupgrade (UP035) тепер пропонує typing.TypeForm на Python 3.15.

Ламаючі зміни

  • Оновлення версій Python за замовчуванням: якщо версія не задана через target-version або requires-python, стандартною версією тепер є Python 3.11 (раніше 3.10). Перевірка синтаксичних помилок без налаштованої версії тепер орієнтується на Python 3.15 замість 3.14.
  • Зміни у стандартному наборі правил: правила DTZ001, DTZ005, DTZ006, DTZ007, DTZ011, DTZ012 та DTZ901 із flake8-datetimez більше не ввімкнені за замовчуванням. Правило undefined-local-with-nested-import-star-usage (F406), що відповідає синтаксичній помилці, навпаки, увімкнено за замовчуванням.
  • Вилучення підтримки ruff-lsp: припинено підтримку застарілого сервера ruff-lsp. Розширення Ruff для VS Code тепер завжди використовує нативний мовний сервер, а параметр ruff.nativeServer оголошено застарілим та ігнорується.
  • Збірки conda-forge без залежності від Python: пакунок більше не залежить від Python, отримав підтримку платформ linux-riscv64, win-arm64, linux-ppc64le та шел-автодоповнення. Команди python -m ruff та import ruff у цьому середовищі більше не працюють — слід запускати ruff напряму через PATH (інсталяцій із PyPI та автономного інсталятора це не стосується).
  • Відображення небезпечних виправлень у CLI: стандартний формат виводу full тепер показує небезпечні виправлення та пропозиції, що вимагають ручної перевірки, незалежно від налаштування unsafe-fixes. Для їх фактичного застосування все одно потрібне явне підтвердження.
  • Unicode 17 та змінні-заглушки: виконано оновлення до Unicode 17 для нормалізації ідентифікаторів та іменованих escape-послідовностей ("\N{...}"). Стандартний lint.dummy-variable-rgx тепер розпізнає імена з префіксом підкреслення в Unicode (наприклад, _次) як фіктивні змінні.
  • Формат JUnit: оновлення quick-junit до 0.8.0 змінило атрибут disabled на skipped у <testsuite> та додало атрибут skipped до кореневого елемента <testsuites>.
  • Імпорти: до flake8-import-conventions (ICN001) додано datetime as dt як стандартний псевдонім.

Виправлення та покращення

  • Швидкодія: оптимізовано лексичний аналіз ідентифікаторів та ключових слів (зокрема спеціалізація для ASCII-символів), буферизовано stdout у ruff format, використано фільтр Блума для пошуку коментарів форматера та оптимізовано роботу зі зрізами вихідного коду.
  • Сумісність синтаксису: дозволено виклик raise без аргументів перед крапкою з комою та ідентифікатори match після крапки з комою, а також усунено збої рендерера діагностики при наявності специфікатора BOM.
  • Безпека автоматичних виправлень: виправлення для правил PLR5501, PLW0120, UP035 і F541 тепер позначаються як небезпечні, якщо вони видаляють коментарі або створюють docstring.
  • Змінні типів: усунуто синтаксичні помилки при оновленні змінних типів із зірочковими обмеженнями (UP040, UP046, UP047, RUF053).
  • CLI: діагностика тепер враховує пріоритет змінної оточення NO_COLOR та коректно обробляє CLICOLOR=0.

Огляд підготовлено автоматично за офіційними release notes за допомогою ШІ та перевірено на відповідність джерелу. Точні формулювання дивіться в оригіналі. Як ми працюємо