Lint и Fix кода Laravel с помощью Duster
Линтование и исправление кода Laravel с помощью Duster


Duster — это инструмент, который объединяет несколько инструментов Laravel.

9 марта 2023 года компания Tighten объявила о выпуске версии 1.0 программы Duster, ориентированной на Laravel.

Duster — это инструмент, который объединяет Laravel Pint, PHP_CodeSniffer, PHP-CS-Fixer и специфичные для Laravel оптимизаторы Tighten в Tlint, чтобы обеспечить мощный и всеобъемлющий набор инструментов для очистки и исправления кода приложений Laravel.

Если вы читали статьи, посвященные совместному использованию правил PHPCS или совместному использованию правил PHP-CS-Fixer, то вы уже знакомы с идеей публикации набора собственных правил для своих проектов. Duster берет базовые определения Laravel в Pint, а затем добавляет мощь дополнительных оптимизаторов и корректоров с помощью трех других инструментов, входящих в комплект. По умолчанию он придерживается стиля кода Tighten, но его также можно полностью настроить в соответствии с вашими предпочтениями.

Давайте рассмотрим, как установить Duster, как его запустить, как интегрировать в автоматизированные рабочие процессы и как его настроить (при желании, - возможно, вас устроят правила по умолчанию).

Установка Duster.

Есть несколько способов запустить Duster в вашем приложении, но самый простой способ начать - это установить его в качестве зависимости Composer в вашем приложении.

composer require tightenco/duster --dev

Вам не нужно ничего публиковать или настраивать; Duster поставляется с готовым набором стилей из коробки, и если они вам нравятся, он будет готов к работе сразу после установки.

Запуск Duster.

Есть две основные функции, которые предоставляет Duster: " linting" и "fixing". Линтинг сообщает вам, когда что-то в вашем коде не соответствует правилу. Исправление исправляет этот код.

Сначала можно заняться основами: Линтинг или исправление всего кода.

Если запустить lint, он даст нам линтинг всей кодовой базы, запустив все инструменты линтинга:

./vendor/bin/duster lint

Это даст нам результаты для каждого инструмента и, как и любой другой linter, вернет код успеха или неудачи, который можно использовать в инструментах CI или других скриптах.

Скриншот выполнения Duster, показывающий вывод команды lint

Можно также выполнить команду fix, чтобы указать всем включенным инструментам исправить все проблемы во всей кодовой базе:

./vendor/bin/duster fix

Скриншот Duster показывает результат работы команды fix

Вычищать только "грязные" файлы.

Когда в существующую базу кода внедряется линтер/фиксер, это часто может показаться непосильной задачей: нужно сделать так много мелких исправлений, что может возникнуть соблазн бросить все это дело.

Одним из способов избежать запуска исправлений (или получения тонны ошибок в lint) для кода, над которым вы в данный момент не работаете, является флаг Duster --dirty, который запускает линтеры/фиксаторы только для файлов с неподтвержденными изменениями.

./vendor/bin/duster lint --dirty
./vendor/bin/duster fix --dirty

Зачем нужны исправления и чистка?

Есть две основные причины, по которым Duster и многие подобные ему инструменты предлагают как обработку, так и исправление. Зачем добавлять линтинг, если всегда можно просто все исправить?

Во-первых, некоторые команды могут предпочесть рабочий процесс, при котором некорректный код появляется в виде неудачной сборки (например, в виде GitHub Action), а не исправляется.

Во-вторых, некоторые косяки нельзя исправить автоматически. Компьютер может определить, что ваш код неисправен, но не настолько умен, чтобы исправить его за вас.

Интеграция Duster в систему.

Как и большинство инструментов анализа кода, команда lint в Duster возвращает код успеха или ошибки в зависимости от того, удалось ли выполнить проверку. Это означает, что вы можете использовать ./vendor/bin/duster lint в любом CI-конвейере для вывода сборки в ошибку, если команды lint не совпали. Также можно использовать ./vendor/bin/duster fix как часть Husky hook или CI hook для автоматического форматирования кода.

Если вы используете GitHub Actions, Duster позволяет легко опубликовать настройку действия, которая будет либо lint ваш код, либо fix его. Запустите ./vendor/bin/duster github-actions и следуйте подсказкам, чтобы добавить GitHub Action в вашу кодовую базу.

Настройка Duster (и его инструментов).

Как и Pint, Duster воплощает мнение его создателей (Tighten) о том, как должен быть оформлен код. Но и сам Duster, и каждый из импортируемых им инструментов можно настроить по своему вкусу.

duster.json

Duster предоставляет свой собственный файл конфигурации, duster.json. Этот файл позволяет вам определять файлы и папки для include или exclude из файлов по умолчанию Laravel, на которые он нацелен по умолчанию. Вы также можете использовать его для определения дополнительных скриптов, которые вы хотели бы запустить как часть вашего потока duster.

Например, вы можете добавить PHPStan в команду lint с помощью следующего duster.json:

{
    "scripts": {
        "lint": {
            "phpstan": ["./vendor/bin/phpstan", "analyse"]
        }
    }
}

Вы также можете определить собственные пользовательские дополнения к команде fix.

Зависимости Duster.

Вы можете настроить каждую из зависимостей Duster с помощью их собственных конфигурационных файлов; подробнее об этом можно узнать в разделе "Настройка" в руководстве Duster.

  • Pint: pint.json
  • PHP_CodeSniffer: .phpcs.xml.dist
  • PHP-CS-Fixer: .php-cs-fixer.dist.php
  • Tlint: tlint.json

В заключение

Вот и все! В целом, Duster — это инструмент для линтинга и исправления проблем со стилем кода в ваших приложениях Laravel. Он имеет собственное мнение и придерживается предпочтительных стандартов Tighten из коробки, но его также можно настроить по своему усмотрению, включая ваши собственные стандарты, если вы их обозначите.

Перевод с английского официальных новостей Laravel:
https://laravel-news.com/tighten-duster

Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню