Опциональные зависимости в пакетах могут использоваться в нескольких вариантах.
1) Улучшение функционала без добавления чего-то нового. Независимо от наличия зависимости функционал будет работать, но с зависимостью, например, будет работать быстрее.
2) Расширение текущего функционала, но на уровне приложения нужно будет использовать опциональную зависимость. Например, драйвера для различных БД: ставим драйвер и в приложении настраиваем его использование.
3) Опциональная зависимость обязательно требуется для работы части функционала пакета. Если мы используем данный функционал в приложении, то обязательно нужно поставить какую-то дополнительную зависимость.
В последнем варианте можно столкнутся с ситуацией, когда пакет установили и использовали как раз функционал требующий дополнительной зависимости. Если мы забыли установить зависимость, то получим ошибку во время выполнения. Описывал такой случай ранее.
К сожалению, существующие статические анализаторы (Psalm, PHPStan, Composer Require Checker, Composer Dependency Analyzer) помогут во втором варианте (зависимость используется в приложении и анализатор увидит это), но не спасут в третьем варианте (на уровне приложения всё на месте, проблема внутри пакета). По крайней мере я не нашёл такой возможности.
А было бы классно иметь, например, PHPStan-аннотацию
@composer-require которая для класса/интерфейса/перечисления в случае его использования в приложении проверяет наличие зависимости. /**
* @composer-require symfony/property-access:^6.4|^7.0|^8.0
*/
final class ObjectNormalizer ...
Как вам идея? 🤔
PS Для PHPStan сделал тикет.