Сергей Соколов, статический анализ может выявить только сами переменные, проверить используются они или нет не возможно без нормального покрытия тестами которое в свою очередь обеспечит достаточную статистику для выявления неиспользуемого кода c помощью xdebug или чего-то подобного
напиши сам, ничего особо сложно - разбираешь шаблоны Twig\Lexer::tokenize() в ответ получаешь набор токенов перебираешь циклом и находишь имена переменых проверяя Token::getType(): все что между Token::VAR_START_TYPE и Token::VAR_END_TYPE - имена переменных Token::getValue().
Ну или вариант для ленивых - написать свой простенький парсер на регулярках, что-то вроде `/{{\s+(.+?)\s+}}/`
Антон Шаманов, оба варианта не покрывают задачу автора - так как нужно найти в PHP файлах данные которые впустую передаются во view-файлы.
Не знаю какого размера там legacy проект, но при должной сноровке и нормальном IDE делов не больше чем на день, если всё проверять вручную.
nokimaro, да, туплю - я думал для всех очевидно, что имена переменных полученныx из шаблона нужно сравнивать с передаваемыми значениями - разница и будет теми неиспользуемыми значениями
есть вариант еще проще, обратный приведенным выше: установить strict_variables и исключать по очереди переменные - если рендеринг фейлится, то значит исключенная переменная используется.
основные случаи такие решения должны покрыть т.ч. в любом случае придется в полуавтоматическом режиме делать т.к. нужно проверять - возможно переменная выводится при определенном условии