check-file-length: exclude alembic/proto не срабатывает в плоской раскладке; no-broad-except слеп к BOM #17
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?
Два независимых дефекта, найденных ревью #7 и #13 по соседству с их скоупом. В тех PR не чинились намеренно — другой хук.
1.
check_file_length.sh:*/alembic/versions/*не матчит верхнеуровневый путьscripts/check_file_length.sh:135:Для
protoобе формы предусмотрены, дляalembic— только вложенная. Путьalembic/versions/a1b2c3_add_user.py(миграции лежат в корне репозитория — типовая раскладка) под исключение не попадает и проверяется на длину. То же и с__init__.pyв корне пакета верхнего уровня.Лечится симметрично proto — добавить формы
alembic/versions/*и__init__.py.Тот же класс дефекта был в README-примере
max-filename-words(.*/alembic/versions/.*не исключалsrc/alembic/versions/…) и там уже исправлен на(.*/)?….2.
check_no_broad_except.py: файл с BOM молча зелёныйscripts/check_no_broad_except.py:35:open()безencodingчитает BOM какU+FEFF,ast.parseпадаетSyntaxError: invalid non-printable character U+FEFF, аexcept SyntaxError: return []превращает это в «нарушений нет». То есть достаточно BOM'а в начале файла, чтобы весь файл прошёл мимо хука — с молчаливым зелёным, а не с ошибкой.Лечение —
encoding="utf-8-sig"иexcept (OSError, UnicodeDecodeError), ровно как сделано дляno-private-imports/no-private-method-callsв #13 и дляno-issue-refs-in-commentsв #12. Фикстура с BOM обязательна: без неё мутация «убратьencoding=» переживает smoke — прецедентfixtures/issue_refs/bom_docstring.py.Стоит заодно пройтись по всем хукам, читающим файл, и свести чтение к одному месту: это уже четвёртый хук с той же дырой, каждый чинился отдельно.
Приёмка
__init__.pyв корне исключаютсяcheck-file-length; кейс в smokeexcept Exceptionроняетno-broad-except; фикстура + кейсencoding=» роняет smokeЗакрываю: сделано в #22 (в
main, версия0.18.0).check-file-lengthсравниваются с"/$file", поэтому одна форма паттерна покрывает и вложенный, и верхнеуровневый путь — дублировать строку следующему исключению не придётся.alembic/versions/…,__init__.pyиproto/generated/…в корне репозитория теперь скипаются;alembic/env.pyи голыйversions/…по-прежнему проверяются (негативный контроль в smoke ловит и это переширение).no-broad-exceptчитает файл вutf-8-sigи ловитUnicodeDecodeError: BOM больше не отправляет весь файл мимо хука черезast.parse→SyntaxError→ «нарушений нет». Фикстураfixtures/broad_except/bom.py; мутация «убрать encoding» роняет smoke. У хука заодно появилась своя секция в README — раньше её не было вовсе.Остаётся не сделанным, что предлагала последняя часть задачи, — свести чтение файла в один хелпер: это шестой хук с одинаковой строкой. Заведу отдельно, вместе с двумя соседними находками ревью:
migrations/versions/…(раскладкаalembic init migrations) под исключение не попадает, и недекодируемый файл во всех трёх ast-хуках пропускается молча, без строки в stderr — что политике fail-loud противоречит.