Индексатор использования фраз

Считает, в скольких файлах проекта встречается каждая фраза словаря. Запускается с экрана Индексация.

Как устроен прогон

  1. На первом шаге — один общий проход по дереву PHP-файлов, с исключением служебных каталогов. Строится карта «фраза — сколько файлов».
  2. Блокировка сессии освобождается сразу, чтобы не подвешивать другие вкладки админки.
  3. Промежуточное состояние хранится во временном файле, а не в сессии.
  4. Дальше каждый шаг записывает счётчики пачкой и двигает курсор.
  5. По завершении временный файл удаляется.

Клиентский таймаут на странице больше серверного намеренно: первый шаг обходит всё дерево проекта, и рвать его на середине нельзя.

Что именно ищется

Два набора образцов.

Вызовы модуляLang::get и LANG_VAR с кодом фразы в кавычках, с полным именем пространства имён и без него.

Штатные вызовы БитриксаGetMessage, Loc::getMessage и прямое обращение к массиву сообщений.

Код длиннее 250 символов не учитывается. Файл с вхождением считается один раз, сколько бы раз фраза в нём ни встретилась.

Образцы ожидают одинарные кавычки вокруг кода; для двойных у вызовов модуля есть отдельная ветка.

Точка расширения

Если у вас своя обёртка над словарём, добавьте её образец в список образцов первого набора — метод CodeScanner::getPassAPatterns().

Без этого все фразы, выведенные через обёртку, будут числиться неиспользуемыми и попадать в кандидаты на удаление. См. Своя обёртка для переводов.

Исключения путей

Список исключённых каталогов лежит в сканере; обычно достаточно дописать туда свой путь.

Исключаются загрузки, кеш, каталоги зависимостей и сам модуль. Последнее существенно: внутри модуля кодов фраз много, и без исключения счётчики были бы завышены у всех служебных фраз.

Чего индексатор не может

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

Это не недоработка, а граница метода. Выполнять код проекта, чтобы узнать, какие фразы он позовёт, нельзя ни при каких обстоятельствах.