Как написать правило PHP Mess Detector, которое имеет контекст проекта, а не только на уровне класса?
Я хотел бы написать правило, чтобы найти все общедоступные неиспользуемые функции в проекте. Я скопировал и исправил оригинальный UnusedPrivateMethod для работы. Но, увы, он работает слишком хорошо и находит ВСЕ общедоступные функции в проекте.
Это происходит потому, что публичные функции обычно вызываются из других классов, а область действия правила, по-видимому, находится на уровне класса. Таким образом, внутри каждого класса публичные функции не используются и поэтому являются частью результата.
Таким образом, вопрос о том, как я могу написать правило с контекстом, который находится на уровне проекта, а не только на уровне класса?
2 ответа
Невозможно получить все открытые вызовы методов, просто проанализировав исходный код вашего проекта, так как некоторые вызовы могут быть сделаны с
call_user_func()
или же
$object->$method()
Предлагаю вам максимально полно покрыть проект юнит-тестами. Когда вы их выполните, у вас будет статистика покрытия кода. Это может быть представлено в хорошей удобной для чтения форме. Вы увидите, какие методы вызываются, а какие не используются.
Да, вам придется потратить некоторое время на написание этих модульных тестов. Но это того стоит.
Взгляните на php-модульное тестирование и покрытие кода.
Некоторое время назад у меня была такая же проблема, и в итоге я сделал динамический анализ кода для этого. В основном я запускал свой сайт в течение определенного периода времени и имел выходные файлы использования xdebug. Чтобы разобрать все это, я создал небольшой инструмент, PHPAnalyzer, который просматривает эти файлы и выводит статистику всех используемых функций (или не используемых). Среди этой статистики - количество звонков. Инструмент на самом деле не отшлифован, и любой вклад приветствуется.