Правила обнаружения файлов (Discovery)¶
Правила этой группы сообщают о выборе файлов самим прогоном, а не о коде, который он проанализировал. Фильтр, который ничего не убрал, выглядит ровно как отсутствие фильтра: отчёт покрывает файлы, которые автор собирался исключить, и каждое число в нём посчитано по набору, о котором никто не просил.
Непривязанное исключение¶
Rule ID: discovery.unmatched-exclude
Что измеряется¶
Каждое значение --exclude и каждая запись exclude: в qmx.yaml сверяется с каталогами, которые прогон действительно обошёл. Значение, не убравшее ни одного каталога, сообщается.
Почему это важно¶
Без этого канала промахнувшееся исключение и его отсутствие дают побайтно одинаковый вывод. В отчёте нет ничего, что сказало бы автору: --exclude=vendor не сработал, потому что прогон и так начинался ниже vendor/, а exclude: [tests] перестал совпадать, когда каталог переименовали в test/. Исключаемые файлы анализируются, дают находки, а исключение остаётся в конфигурации и выглядит работающим.
Область и severity¶
Канал сообщается на уровне проекта, severity warning.
Он судится только на прогоне, чьи пути покрывают всё, что composer.json проекта объявляет production-кодом, — корни psr-4 и psr-0, записи classmap и files наравне. На более узком прогоне — по одному подкаталогу, по git-срезу — паттерн не привязывается просто потому, что названный им код лежит вне среза. Это выбор вызывающего, а не ошибка автора, поэтому правило молчит, а не пересказывает вызывающему его же сужение. Проект, чей манифест не объявляет production-автозагрузки вовсе — нет composer.json, он не парсится или в нём нет ни одной production-секции, — не даёт проверке знаменателя, и там правило тоже молчит.
Паттерн судится по всему дереву проекта, а не по анализируемым путям. exclude: [tests], написанный для qmx check ., ничего не убирает под qmx check src/, но названный им каталог на месте — и правило молчит. Сообщается только паттерн, который не убрал бы ни одного каталога нигде в проекте.
| Правило | ID | Что обнаруживает |
|---|---|---|
| Непривязанное исключение | discovery.unmatched-exclude |
Паттерн исключения, не убравший ни одного каталога |
Пример¶
Когда каталога Generated нигде в проекте нет:
[project] discovery.unmatched-exclude
The exclude pattern "Generated" matched no directory anywhere in the project,
so nothing was left out for it. Every file it was written to skip was
measured, and this report covers them.
Опции¶
| Опция | По умолчанию | Описание |
|---|---|---|
enabled |
true |
Включает или выключает правило |