Що робить цей інструмент
Форматувальник Python переписує код Python у поширеному стилі Black: послідовні відступи, пробіли навколо операторів, подвійні лапки, два порожні рядки між визначеннями верхнього рівня та перенесення довгих рядків у доречних місцях.
Під капотом працює форматувальник із Ruff — швидкого лінтера й форматувальника для Python, написаного на Rust і скомпільованого у WebAssembly. Результат Ruff майже рядок у рядок збігається з Black, тож відформатований тут код не буде переформатовано знову pre-commit-хуком вашого проєкту.
Як користуватися
- Вставте код Python або відкрийте файл
.py. - Відформатований код з’являється праворуч під час набору.
- Налаштуйте параметри, якщо ваш проєкт використовує інший стиль:
- Відступ: 4 пробіли — це PEP 8 і значення за замовчуванням; доступні 2 пробіли й табуляція.
- Ширина рядка: 88 — значення Black за замовчуванням, 79 — межа PEP 8, а 100 чи 120 пасують ширшим екранам.
- Лапки: подвійні, одинарні або зберегти ті, що вже використовує кожен рядок.
- Враховувати кінцеві коми: колекції, що закінчуються комою, лишаються розгорнутими.
- Скопіюйте або збережіть результат.
Якщо код не вдається розібрати, повідомлення про помилку показує, де зупинився парсер, наприклад Expected `,`, found `=` у рядку 4, і до цього рядка можна перейти.
Приклад
Приклад — невеликий модуль, написаний абияк: імпорти в один рядок без пробілів, dataclass із пробілом перед двокрапкою, метод із відступом у два пробіли та однорядковий if. Після форматування кожен блок має відступ у чотири пробіли, тіло if переходить на окремий рядок, оператори отримують пробіли, одинарні лапки стають подвійними, а між класом і функціями додаються порожні рядки. Список, що закінчувався кінцевою комою, розгортається по одному словнику на рядок.
Чого форматувальник не робить
Форматування змінює лише розмітку коду. Воно не сортує імпорти, не видаляє невикористані змінні й нічого не перейменовує — це робота лінтера (ruff check --fix з цим впорається). Коментарі й docstring зберігаються, а код, який неможливо розібрати, форматувальник відмовляється змінювати, замість того щоб угадувати.
Поради
- Використовуйте ту саму ширину рядка, що й у
pyproject.tomlвашого проєкту, щоб результат збігався з CI. - Фрагмент коду легше читати, якщо відформатувати його перед публікацією в питанні чи рев’ю.
- Якщо код прийшов із ноутбука чи чату й містить змішані табуляції та пробіли, форматувальник нормалізує їх за один крок.
Часті запитання
› Чи результат такий самий, як у Black?
Форматувальник Ruff задуманий як пряма заміна Black і збігається з ним на понад 99,9% рядків у великих реальних проєктах. Налаштування за замовчуванням тут (відступ 4 пробіли, 88 стовпців, подвійні лапки) — це налаштування Black за замовчуванням.
› Що таке «магічна кінцева кома»?
Якщо список, виклик чи визначення закінчується кінцевою комою, Black і Ruff залишають його розгорнутим по одному елементу на рядок, навіть якщо все вмістилося б в один рядок. Вимкніть перемикач, щоб такі колекції згорталися, коли вміщаються.
› Які версії Python підтримуються?
Парсер розуміє сучасний синтаксис Python 3, зокрема оператори match, списки параметрів типів і f-рядки з вкладеними лапками. Код Python 2 на кшталт `print "x"` — синтаксична помилка.
› Чи вивантажується мій код на сервер?
Ні. Модуль Ruff WebAssembly завантажується один раз, а форматування виконується у вашому браузері.