no-issue-refs-in-comments: научить //-комментариям и снять types: [python]; todo-needs-issue: строгий TODO(#N) #8
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?
Решение volody 25.08.2026:
check-file-length,todo-needs-issueиno-issue-refs-in-comments— общий канон для всех репо homedevlab, включая TS-репо (jamzap/frontend, jamzap/mobile). Сегодня третий хук туда не переносится, и это чинится здесь, а не в конфигах потребителей.1.
no-issue-refs-in-comments— python-only дваждыОпределение хука (
.pre-commit-hooks.yaml) несётtypes: [python]. Потребитель на TS может это переопределить (types: [file]), но упрётся во второе:Реализация (
scripts/check_no_issue_refs_in_comments.py,extract_comment) считает комментарием только то, что начинается с#. В.ts/.tsxкомментарии —//и/* */, поэтому функция не найдёт ни одного комментария и хук молча пройдёт. Это хуже отсутствия хука: конфиг заявляет гейт, которого нет.Что сделать:
types: [python]из определения — скоуп задаёт потребитель черезfiles:, как уже сделано уno-broken-repo-pathsиno-session-marks-in-code;extract_commentраспознавать//и блочные/* */наряду с#; выбор синтаксиса — по расширению файла, а не «всё сразу»:#в.tsвстречается в приватных полях классов (#field) и дал бы ложные срабатывания, а//в.pyне комментарий вовсе;/* */понадобится отдельная ветка);.mdв скоуп не тащить: там#— заголовок. Ограничение задаёт потребитель, но стоит упомянуть вdescriptionхука.Образец правильного устройства —
no-broken-repo-paths: в.pyсканирует COMMENT/STRING-токены, в прочих файлах идёт построчно.2.
todo-needs-issue— regex принимает префиксыСейчас:
TODO\b(?!\s*\([^)]*#\d+[^)]*\)). Внутренний[^)]*разрешает что угодно перед номером, поэтомуTODO(jamzap/backend#402)проходит наравне сTODO(#402).Принятый формат — строго
TODO(#123), голый номер: TODO живёт внутри своего репо, кросс-проектных не заводим. Regex ужесточить до варианта, который принимает толькоTODO(#N)(иTODO(#N, #M), если множественные ссылки нужны), а прочее содержимое скобок отвергает.Осторожно с обратной совместимостью: у потребителей уже есть TODO с префиксами — в jamzap/mobile их около десятка. Ужесточение сделает их красными на следующем касании файла, что и требуется, но потребителей нужно предупредить в CHANGELOG.
3. Релиз
Обе правки — в один тег (
v0.11.0), потребители поднимутrev:. Потребители, которые ждут именно этого: jamzap/frontend#229 и jamzap/mobile#124 (там канон включается после выхода тега). jamzap/backend#464, jamzap/infra#225 и volody/dispatcher#180 работают и наv0.10.0— эти репозитории python/shell'овые.✅ Вышло в
v0.11.0(PR #10, коммит3530435).no-issue-refs-in-comments— снятtypes: [python], синтаксис комментария выбирается по расширению://и/* */для C-подобных,#для остальных. Выбор по расширению, а не «все сразу», намеренный: в.tsсимвол#начинает приватное поле класса. Строковые литералы, включая шаблонные, комментарием не считаются; блочный комментарий переносит состояние между строками..css/.scss/.lessв список не включены, хотя в задаче упоминались C-подобные вообще: hex-цвет в комментарии (// раньше был #336699) неотличим от ссылки на задачу, и это завело бы новый класс ложных срабатываний.todo-needs-issue— формат строгий:TODO(#N), несколько ссылок через запятую. Исключение для TODO внутриno-issue-refs-in-commentsсужено до того же формата, чтобы оба хука говорили о префиксе одно и то же.Оговорка: кросс-проектную форму
TODO(ns/proj#N)самno-issue-refs-in-commentsне ловит — там#Nстоит вплотную к букве и под#NNNне подпадает. РасширятьISSUE_REF_REне стал, это потянуло бы ложные срабатывания на URL-фрагментах; формат ловитtodo-needs-issue.Остаточные ограничения разбора комментариев (многострочный шаблонный литерал, второй комментарий в строке, апостроф в JSX, непокрытая обработка строковых литералов) вынесены в #11 — чинить их стоит переиспользованием машины состояний из
no-broken-repo-paths, а не заплатами по одной.Потребителям. Обновление
rev:покрасит TODO с префиксами на первом же касании файла, а хукno-issue-refs-in-comments, прописанный безfiles:, расширится за пределы python. Это ожидаемо; в README дописана оговорка, что в0.xломающие правки едут в minor и обновлятьrev:стоит отдельным PR.