![Обложка к записи Статический анализатор кода Psalm в WordPress](https://www.kobzarev.com/wp-content/uploads/2022/02/psalm-php-wordpress.jpg)
Статические анализаторы кода (PHPStan, Psalm, Phan) просто читают код и пытаются найти в нём ошибки.
Они могут выполнять как очень простые и очевидные проверки (например, на существование классов, методов и функций, так и более хитрые (например, искать несоответствие типов, race conditions или уязвимости в коде).
Ключевым является то, что анализаторы не выполняют код — они анализируют текст программы и проверяют её на типичные (и не очень) ошибки.
Далее пойдёт речь об одном таком синтаксическом анализаторе кода под названием Psalm.
Установка Psalm
12345678 | # Устанавливаем 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
12345 | # Устанавливаем плагин composer require --dev humanmade /psalm-plugin-wordpress # Активируем плагин в psalm.xml . /vendor/bin/psalm-plugin enable humanmade /psalm-plugin-wordpress |
Команда для Composer
Для удобства запуска Psalm из терминала рекомендую добавить свой скрипт в конфигурацию composer.json:
123 | "scripts" : { "psalm" : "vendor/bin/psalm --config=psalm.xml" , } |
После чего у вас появится возможность запуска Psalm, используя команду composer psalm
.
Psalm в PhpStorm
Раздел наполняется
RTFM
Читать полностью www.kobzarev.com