Рекурсивное форматирование кода с помощью YAPF: подробное руководство

Форматирование кода важно для поддержания чистоты и читаемости кодовой базы. YAPF (Yet Another Python Formatter) — популярный инструмент, который автоматизирует форматирование кода в соответствии с руководством по стилю PEP 8. В этой статье блога мы рассмотрим различные методы рекурсивного запуска YAPF в ваших проектах Python, обеспечивая целостность и организованность кода.

Методы рекурсивного запуска YAPF:

Метод 1: использование сценария Bash
Один из способов рекурсивного запуска YAPF — использование сценария Bash. Создайте новый файл, например, format.sh, и добавьте следующий код:

#!/bin/bash
find . -iname "*.py" -type f -exec yapf -i {} \;

Сохраните файл и сделайте его исполняемым с помощью команды: chmod +x format.sh. Затем выполните сценарий, запустив ./format.shв терминале. Этот скрипт рекурсивно находит все файлы Python в каталоге и применяет форматирование YAPF на месте.

Метод 2: использование скрипта Python
Другой подход — написать скрипт Python, который использует модуль osдля перемещения по каталогам и применения форматирования YAPF. Вот пример:

import os
import subprocess
def format_directory(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(".py"):
                filepath = os.path.join(root, file)
                subprocess.run(["yapf", "-i", filepath])
# Usage
format_directory("path/to/directory")

В этом методе функция format_directory()рекурсивно обходит указанный каталог и применяет форматирование YAPF ко всем файлам Python.

Метод 3: использование хука диспетчера пакетов.
Если вы используете такой менеджер пакетов, как pipenvили poetry, вы можете использовать его хуки перед фиксацией для автоматически запускать YAPF перед фиксацией изменений. Установите YAPF как зависимость разработки и добавьте в свой проект следующую конфигурацию:

Для pipenv:

[dev-packages]
yapf = "*"
[scripts]
pre-commit = "yapf --recursive --in-place ."

Для poetry:

[dev-dependencies]
yapf = "*"
[scripts]
pre-commit = "yapf --recursive --in-place ."

Настроив эти перехватчики, YAPF будет автоматически форматировать ваш код всякий раз, когда вы пытаетесь зафиксировать изменения.

YAPF предоставляет мощные функции для автоматизации форматирования кода, обеспечивая единообразие стилей в проектах Python. В этой статье мы рассмотрели три метода рекурсивного запуска YAPF: использование сценария Bash, сценария Python и перехватчиков менеджера пакетов. Выберите метод, который лучше всего подходит для вашего рабочего процесса, и наслаждайтесь чистым и организованным кодом!