feat(comment_scan): свои режимы комментариев для стилей и разметки #26
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/markup-style-comment-mode"
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?
Закрывает #11.
Что было нельзя
.css,.scss,.html,.vue,.svelteпадали в#-фолбэк, где решётка открывает комментарий. Флагалось всё подряд — и ни одно из этого комментарием не является:README прямо советовал такие расширения не подключать. Теперь их можно скоупить.
Три режима
.css,.scss,.sass,.less) —/* */;//только в препроцессорах и не внутриurl(). Именно из-заurl(//cdn.example.com/x)здесь не переиспользованc_style_chunks: он принял бы//за начало комментария и съел остаток строки. В чистом CSS//не комментарий вовсе..html,.htm,.vue,.svelte,.xml,.svg) —<!-- -->, а встроенные<script>и<style>отдаются своим сканерам с пересчётом номеров строк относительно всего файла. Кейсы пиннят обе строки вembedded.vue::6:внутри script,:12:внутри style.#-фолбэк (shell/yaml/toml).Выбор режима — одна точка
Раньше каждый хук решал сам, и расхождение росло:
no-broken-repo-pathsразбирал любой не-python файл как C-подобный, независимо от того, чем он был. Теперь этоchunks_for(path, source)вcomment_scan— режим есть свойство языка, а не хука.no-session-marks-in-codeподключён к тому же слою, поэтому CSS-селекторgrid-area: A1перестал быть «tracking-меткой», а комментарий сR31ловится.Проверка
Фикстуры
fixtures/markup/: hex-цвета и id-селекторы,url(//cdn…), текст страницы, текст после закрытия-->, комментарии всех трёх видов, встроенные блоки во.vue.Мутации, каждая роняет smoke: вернуть стили и разметку в hash-режим (4 кейса), убрать строчные комментарии scss, убрать разбор встроенных блоков (2 кейса), не закрывать комментарий по
-->, убрать url-режим.Две последние мутации сначала выживали — фикстуры их не различали: после
-->в файле ничего не стояло, а фрагмент вurl()был нечисловым, то есть ссылкой не считался в принципе. Добавленыurl.scss(сегмент пути похож на метку — её вырезание не спасает) и текст после закрытия комментария вgood.html.Версия
0.18.0→0.21.0:0.19.0за #24,0.20.0за #25. Мержить последним из трёх; если порядок изменится, номер поправлю.Смежные пункты из тела задачи (зависимость
no-broken-repo-pathsот неверсионируемых.git/info/excludeиcore.excludesFile; асимметрия пробелов вtodo-needs-issue) в этот PR не входят — они про другие хуки. Заведу отдельно.cfea45146bf5cb22c36aРевью (субагент, свежий контекст): 3 блокера. Все подтвердил воспроизведением и исправил.
B1 — незакрытый и самозакрытый
<script>ослепляли разбор до конца файла. Воспроизвёл оба репро: комментарий после такого тега пропускался молча, exit 0. Диапазон без закрывающего тега теперь не растягивается до EOF, а блок просто не сканируется — недосканированный блок лучше молчаливого пропуска всего остатка. Самозакрытие/>распознаётся отдельно: иначе поиск закрытия уезжал на конец следующего блока, и текст между ними считался содержимым<script>. Обе формы закреплены фикстурами, включаяselfclosing_then_block.html, который различает именно эту пару.B2 — README противоречил новому поведению. Абзац в
no-session-marks-in-code(«такие расширения либо не скоупь… отдельный режим — #11») описывал ровно то, что PR отменяет, и ссылался на закрываемую задачу как на будущую. Переписан. Уno-broken-repo-pathsдописано, что режимов теперь пять и что для него это поведенческое изменение — раньше<!-- см. docs/old.md -->в.htmlхук не видел вовсе.B3 — гейт
no-broken-repo-pathsрасширился незаметно. Подтверждаю замер:.shи.yamlв первой редакции начинали падать, хотя удалённый комментарий вmainфиксировал это как намеренно не сделанное. Переворачивать чужое осознанное решение в PR не про это — неправильно, поэтому уchunks_forпоявилсяhash_fallback, и хук зовёт его сFalse: shell и yaml не разбираются, как и раньше (кейсmarkup_shell_comment_not_scanned). А стили и разметку хук теперь видит — это и есть суть задачи, и в README это записано как поведенческое изменение с предупреждением консьюмеру.Ниты:
<style lang="scss">разбирается правилами препроцессора; мёртвый аргументpathуmarkup_chunksубран, вместо него читаются атрибуты тега.urlсбрасывается на переводе строки (незакрытыйurl(больше не глушит файл), иurl(матчится только на границе токена —background-url(не считается.<!--даёт громкий ложняк, блок без закрытия не сканируется.<style-guide>и<scripts>больше не считаются нашими тегами.style_chunks, EOF-flush вmarkup_chunks, номера строк многострочных комментариев в обоих режимах, незакрытый блок, самозакрытый тег,lang="scss", разделитель после имени тега, url-режим. Четыре из них после первой правки всё ещё выживали — фикстуры их не различали; добавленыselfclosing_then_block.html,markup_comment_in_js_string.html,embedded_scss.vue,similar_tag_name.html.no-broken-repo-pathsпоявились кейсы на новых режимах (paths.html,paths_good.html) и на сохранённой границе (hash_lang.sh).comment_scan(«три режима» → пять, с описанием обоих новых) иcheck_no_broken_repo_pathsобновлены.<script>больше не даёт двойной строки.check-ignore/core.excludesFileи пробелы вTODO(...)). Слинковано в теле PR.no-session-marks-in-codeскоупится наcss|scss|vue, с оговоркой про.sql/.yaml.N10 (порядок мержа) — #24 уже в
main(0.19.0), ветка отребейзена на него, конфликты по импортам разрешены объединением (read_source+chunks_for). Мержу после #25; тегv0.21.0проставлю следом.f5cb22c36a6d055f36ca