Правила обнаружения файлов (Discovery)¶
Правила этой группы сообщают о выборе файлов самим прогоном, а не о коде, который он проанализировал. Фильтр, который ничего не убрал, выглядит ровно как отсутствие фильтра: отчёт покрывает файлы, которые автор собирался исключить, и каждое число в нём посчитано по набору, о котором никто не просил.
Непривязанное исключение¶
Rule ID: discovery.unmatched-exclude
Что измеряется¶
Каждый эффективный авторский exact, subtree или regex селектор сверяется
с наблюдёнными записями: файлами, каталогами, ссылками и special entries.
Все совпавшие селекторы привязываются до пропуска записи. Равные записи из файла,
CLI и пресетов группируются по canonical display с сохранением истории источников.
| Измеренный исход | Что сообщает прогон |
|---|---|
| Селектор привязался | Removed, без unmatched-предупреждения |
| Ничего не привязалось и скрытого места нет | Предупреждение о непривязанном селекторе |
| Совпадение могло быть в снятом каталоге своего источника | Ограниченное предупреждение о совпадениях вне того, что убирает hider |
| Возможный hider имеет источник вне набора источников селектора | Значение не судится; scope reason называет hider и его foreign origins |
| Возможное место нельзя перечислить | Названный недоступный каталог; абсолютное отсутствие не утверждается |
| Неизвестен состав кода или неполны PHP-пути | Ещё не привязанный селектор не судится |
Область и severity¶
Канал сообщает на уровне проекта с severity warning под итоговой селекцией
producer. Он спрашивает полноту PHP-путей и известность состава кода отдельно
от отсутствия деклараций: авторское снятие PHP и generated-файлы сами по себе
не выключают эту проверку. Привязанный селектор остаётся Removed на узком прогоне.
Git --report ограничивает публикацию, а не анализ; этот канал сохраняется
и в strict-режиме. См. охват проекта.
Внутрь снятого каталога аудит не спускается. Возможные hider — физические каталоги, включая цель допустимого named directory alias, но не walked links и не отдельные файлы. Regex мог совпасть в любом таком каталоге; exact/subtree использует буквальное вложение. Любой источник hider, отсутствующий среди источников проверяемого селектора, делает его other-source; пересечение наборов допустимо, other-source имеет приоритет. Одинаковые наборы дают same-source.
Снятый каталог вне выбранных путей имеет невидимых потомков: это именованная неизвестность состава кода, без listing или PHP-поиска внутри него. Селектор остаётся привязанным, но остальные отсутствие-селекторы могут не судиться. Недоступная запись внутри выбранного прогона делает coverage неполным и даёт код 4; одного severity-предупреждения недостаточно для авторитетного результата.
Как уточнить ответ¶
Уберите названное CLI/preset исключение и повторите полный прогон. Same-source предупреждение не доказывает, что селектор нигде не нужен; other-source пропуск не означает, что он устарел. Исправьте опечатку или удалите запись только после проверки. Существующие occurrence kinds остаются разными для unmatched и недоступного места: принятие первого в baseline не принимает второе.
Сообщение называет конфигурацию, записавшую селектор (Written by configuration
file "…" (imported by configuration file "qmx.yaml").). Селектор, который
записали только файлы, установленные пакетом Composer, — импортированные из
каталога установки проекта, vendor/, если config.vendor-dir не говорит иного,
— и который ничему не соответствует, не судится: проект не может поправить этот
файл, а следующий слой не может убрать запись exclude. Он перечисляется в
projectScope.unjudgedValues с причиной installed-configuration, называющей
файл. Селектор, который обход не смог решить из-за нечитаемого каталога в дереве
самого проекта, по-прежнему показывается.
Опции¶
| Опция | По умолчанию | Описание |
|---|---|---|
enabled |
true |
Включает или выключает правило |
Конфигурация¶
Selection не создаёт coverage¶
Discovery audit исполняется только при активном producer в итоговом selection. enabled:true — точное авторское включение, не reset; оно может снять нижний disable. Итоговый projectScope judgement отдельно отвечает о полноте selector/path, а не использует вопрос об отсутствии деклараций. Only filter не превращает partial paths в полное coverage. См. конфигурацию.