Статический анализатор кода Psalm в WordPress
Статические анализаторы кода (PHPStan, Psalm, Phan) просто читают код и пытаются найти в нём ошибки.
Они могут выполнять как очень простые и очевидные проверки (например, на существование классов, методов и функций, так и более хитрые (например, искать несоответствие типов, race conditions или уязвимости в коде).
Ключевым является то, что анализаторы не выполняют код — они анализируют текст программы и проверяют её на типичные (и не очень) ошибки.
Далее пойдёт речь об одном таком синтаксическом анализаторе кода под названием Psalm.
Установка Psalm
# Устанавливаем Psalm
composer require --dev vimeo/psalm
# Создаём файл конфигурации
./vendor/bin/psalm --init
# Делаем первый запуск
./vendor/bin/psalm
После первого запуска вы увидите сотни ошибок, связанных с тем, что Psalm ничего не знает о функциях ядра WordPress, например о add_filter
или add_action
.
Чтобы это исправить, достаточно установить плагина WordPress plugin for Psalm от ребят из компании Human Made.
Установка заглушек WordPress
Данный плагин под Psalm предоставляет заглушки (stubs) для всего в ядре WordPress (в том числе, WP CLI), чтобы ваш проект или плагин на базе WordPress имел информацию о типе данных при обращениях к API WordPress:
- Заглушки для всего ядра WordPress
- Заглушки для WP CLI
- Типы для возвращаемых значений
apply_filters
- Типы
add_filter
/add_action
# Устанавливаем плагин
composer require --dev humanmade/psalm-plugin-wordpress
# Активируем плагин в psalm.xml
./vendor/bin/psalm-plugin enable humanmade/psalm-plugin-wordpress
Команда для Composer
Для удобства запуска Psalm из терминала рекомендую добавить свой скрипт в конфигурацию composer.json:
"scripts": {
"psalm": "vendor/bin/psalm --config=psalm.xml",
}
После чего у вас появится возможность запуска Psalm, используя команду composer psalm
.
Psalm в PhpStorm
Раздел наполняется
RTFM
- I can’t make PSalm play nicely with WordPress
- WordPress stubs and plugin for Psalm
- PHP code quality tools Psalm
- Сейчас я буду убеждать вас использовать статический анализ в PHP