Статический анализатор кода Psalm в WordPress

Статический анализатор кода Psalm в WordPress
Click here to view original web page at www.kobzarev.com
Обложка к записи Статический анализатор кода Psalm в WordPress

Статические анализаторы кода (PHPStan, Psalm, Phan) просто читают код и пытаются найти в нём ошибки.

Они могут выполнять как очень простые и очевидные проверки (например, на существование классов, методов и функций, так и более хитрые (например, искать несоответствие типов, race conditions или уязвимости в коде).

Ключевым является то, что анализаторы не выполняют код — они анализируют текст программы и проверяют её на типичные (и не очень) ошибки.

Далее пойдёт речь об одном таком синтаксическом анализаторе кода под названием Psalm.

Установка Psalm

12345678# Устанавливаем Psalmcomposer 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