Я так и чувствовал, что надо было написать пост не только чтобы поделиться, но и потому что я что-то упустил.
@xepozz в комментариях к посту рассказал про метод
ClassLoader::getRegisteredLoaders(), который возвращает массив активных лоадеров, проиндексированных по пути до vendor. А это ровно то, что мне было нужно!Теперь локатор и тест тривиальные: https://gist.github.com/vudaltsov/c7348a8aa54d0ada82c22134c6156001.
ComposerClassLocator покроет 95% случаев подгрузки пользовательских классов. В остальных 5% можно будет имплементировать свой локатор и через компоновщик объединить с другими.Спасибо огромное за то, что вы всегда так внимательно читаете посты и пишете кучу полезных комментариев! 💙