Как написать правило PHP Mess Detector, которое имеет контекст проекта, а не только на уровне класса?

Я хотел бы написать правило, чтобы найти все общедоступные неиспользуемые функции в проекте. Я скопировал и исправил оригинальный UnusedPrivateMethod для работы. Но, увы, он работает слишком хорошо и находит ВСЕ общедоступные функции в проекте.

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

Таким образом, вопрос о том, как я могу написать правило с контекстом, который находится на уровне проекта, а не только на уровне класса?

2 ответа

Решение

Невозможно получить все открытые вызовы методов, просто проанализировав исходный код вашего проекта, так как некоторые вызовы могут быть сделаны с

call_user_func()

или же

$object->$method()

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

Да, вам придется потратить некоторое время на написание этих модульных тестов. Но это того стоит.

Взгляните на php-модульное тестирование и покрытие кода.

Некоторое время назад у меня была такая же проблема, и в итоге я сделал динамический анализ кода для этого. В основном я запускал свой сайт в течение определенного периода времени и имел выходные файлы использования xdebug. Чтобы разобрать все это, я создал небольшой инструмент, PHPAnalyzer, который просматривает эти файлы и выводит статистику всех используемых функций (или не используемых). Среди этой статистики - количество звонков. Инструмент на самом деле не отшлифован, и любой вклад приветствуется.

Другие вопросы по тегам