fix: exclude в check-file-length на любой глубине, BOM не прячет broad except #22
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/length-excludes-broad-except-bom"
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?
Закрывает #17 — два независимых дефекта, найденных ревью #7 и #13 по соседству с их скоупом.
1. Исключения
check-file-lengthне работали в плоской раскладке*/x/*требует непустой сегмент перед слэшем, поэтому путьalembic/versions/a1b2c3_add_user.py(миграции в корне репозитория — типовая раскладка) под исключение не попадал и проверялся на длину. То же с__init__.pyпакета верхнего уровня. Дляprotoобе формы были предусмотрены с самого начала — теперь у всех трёх.2. BOM прятал файл целиком от
no-broad-exceptcheck_no_broad_except.pyчитал файл голымopen(). BOM приезжает в исходник символомU+FEFF,ast.parseпадаетinvalid non-printable character U+FEFF, аexcept SyntaxError: return []ниже превращает это в «нарушений нет». То есть одного BOM'а хватало, чтобы весь файл прошёл мимо хука молча — худший из возможных режимов отказа для запрещающего хука.Лечение то же, что у соседей в
v0.12.0иv0.15.0:encoding="utf-8-sig"иexcept (OSError, UnicodeDecodeError).Проверка
file_length_toplevel_alembic_skipped/file_length_toplevel_init_skippedгоняют хук на относительном пути без ведущих каталогов (иначе сработала бы старая форма исключения). Каталог лежит вне git, поэтому без исключения хук дал бы FAIL — базовой версии нет,old= 0.no_broad_except_bomна фикстуре с BOM,no_broad_except_not_utf8_skippedна бинарном файле.utf-8-sig, убратьUnicodeDecodeError.Заодно
Второй
mktemp -dв серединеfixtures/run_smoke.shперезаписывалSMOKE_TMPиtrapиз шапки — первый временный каталог оставался на диске после прогона (trapперезаписывается, а не добавляется). Снят.Что оставлено отдельной задачей
Сведение чтения файла в один хелпер: это уже шестой хук с той же строкой, и issue про это пишет прямо. Сейчас ровно эту строку правит #21, поэтому рефакторинг после его мержа, отдельным PR.
Версия
0.17.0→0.18.0. Порядок в очереди: #20 (0.16.0) → #21 (0.17.0) → этот. Если порядок мержа поменяется, номер поправлю.4641ec08eb1d557e4a23