feat(no-plan-stage-refs): запрет ссылок на номера этапов плана в коде #20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/no-plan-stage-refs"
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?
Закрывает #14. Заведено по замечанию на ревью jamzap/backend!462: «(Этап 6) — и подобные слова не должны быть у нас в коде».
Что ловит
Ключевое слово + номер (
Этап 6,Этапа 3,Фаза 2.5,Milestone 2,Sprint 4,Этап №7) либо ключевое слово + закавыченное имя (Этап «Preview Tool»).Чего не ловит — это и есть суть правила
Признак нарушения — номер, а не слово. «Фаза» легитимна, когда описывает фазы алгоритма:
Слово то же, смысл другой, вреда нет — такие строки обязаны проходить, иначе хук начнёт требовать переписывания корректной прозы. Разделитель между словом и номером обязателен, поэтому
Stage2Runnerиstage_2тоже мимо.Конфигурация — у потребителя, не в скрипте
По замечанию @volody в issue: и словарь, и исключения зависят от репозитория, и «Фаза A» где-то легитимна, а где-то нет. Поэтому в скрипте зашита только форма нарушения, а списка фраз нет вовсе:
--keyword СЛОВО--keywords a,b,c--pattern REGEX--pattern 'Фаза\s+[A-Z]\b'--allow REGEXДефолтный набор —
Этап,Фаза,Milestone,Sprint,Phase,Stage; падежи ловятся хвостом словоформы, регистр не важен.Почему отдельный id, а не расширение
no-mvp-phase-languageСкоуп того хука у потребителей включает
docs/**, а в плановом документе перечень этапов — предмет документа. Этот хук наводят только на код: дефолтногоfiles:у него нет, как уno-broken-repo-paths.Скан построчный по всему файлу
Не только по комментариям: «(Этап 6)» одинаково вредна в комментарии, в docstring'е и в тексте, который код отдаёт наружу (
verbose_name,description). Форма правила достаточно специфична, чтобы код не флагался — идентификаторы отсекает обязательный разделитель.Файлы
scripts/check_no_plan_stage_refs.py+ console-script вpyproject.toml.pre-commit-hooks.yaml:id: no-plan-stage-refsfixtures/plan_stages/(9 фикстур) + 14 кейсов вfixtures/run_smoke.shREADME.md+examples/.pre-commit-config.example.yamlПроверка
bash fixtures/run_smoke.sh— зелёный; кейсы покрывают падежи,Фаза 2.5, английский словарь, закавыченное имя, буквенную фазу (проходит по дефолту и падает под--pattern), работу каждого из четырёх аргументов и номер строки в выводе.Фаза Aвgood.py), выпадение падежного хвоста, игнор--allow.pre-commitсargs:проверена на временном репозитории:--keyword=Волналовит «Волна 3»,--allow=воронкснимает «Этап 2 воронки продаж», «Этап 6» падает дефолтным набором.Приёмка из issue
Этап N/Этапа N/Этапе N,Фаза N,Milestone N,Sprint NловятсяФаза A/Фаза Bпроходят — фикстураletter_phase.pyплюсgood.pyЭтап «Имя»ловитсяfiles:, дефолтного нетВерсия
0.15.0→0.16.0: новый хук, minor. Напоминание: тегов послеv0.9.1на remote нет — #16.Потребитель — jamzap/backend#478 (64 места в 36 файлах), отдельным MR после релиза.