check-file-length: тесты в корневой tests/ меряются порогами src (300/500) вместо tests (600/1000) #31
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
scripts/check_file_length.sh, блок категоризации:*/tests/*требует хотя бы один символ передtests/. Пути, которые pre-commit передаёт хуку, — относительные от корня репозитория, без ведущего слэша. Поэтомуtests/test_foo.py— файл прямо в корневойtests/, то есть самая обычная раскладка — не матчится, падает в*)и меряется SRC-порогами 300/500 вместо TESTS-порогов 600/1000.Репро:
Проверено на
main(v0.23.0) — воспроизводится.Этот же класс бага в этом же файле уже починен — но только наполовину
Блоком выше, в исключениях, сравнение переведено на
case "/$file"(v0.18.0, #17), и в комментарии там прямо написано, почему именно так:Категоризация осталась на старом
case "$file", и наступает ровно на те же грабли.Что сделать
Перевести второй
caseна ту же форму, что и первый:Это надёжнее варианта
tests/*|*/tests/*: покрывает любую глубину, не требует дублировать паттерн при добавлении следующей категории и совпадает с уже принятым в файле решением.Граница по сегменту пути при этом сохраняется:
/mytests/foo.pyи/contests/foo.pyпод*/tests/*по-прежнему не подходят — слэш обязан стоять непосредственно передtests.Кого задевает
Любой consumer-репозиторий с тестами в корневой
tests/— то есть почти каждый — тихо получает заниженный порог для тестовых файлов. Тест не production-код, его длина нормируется иначе; занижение порога выглядит как внезапный FAIL на правке в +3 строки.Так это и поймали: в
volody/dispatcherфайлtests/test_release_mode.py(593 строки) упал FAIL при росте на 3 строки, хотя по TESTS-порогу 600/1000 он ещё даже не в WARN. Разбор — https://gitlab.homedevlab.ru/volody/dispatcher/-/issues/189.Проверить заодно стоит
jamzap/backend,jamzap/frontend,jamzap/mobile,jamzap/infra,volody/dispatcher— чинить на их стороне нечего, но после релиза им нужен бампrev.Приёмка
tests/test_foo.pyв корне репозитория меряется порогами 600/1000pkg/tests/test_foo.pyпродолжает меряться так же, как раньшеmytests/foo.pyиcontests/foo.pyв категорию тестов не попадаютpyproject.tomlи тег релиза сходятся (гейт из #28), в README актуальныйrev