This repository was archived by the owner on Sep 11, 2026. It is now read-only.
Repository navigation
doc-files: Vue SFC-екстрактор + гібридний рендер Публічного API - #166
Merged
Merged
Conversation
Реалізує ADR 260719-2155 (гібрид «скриптовий рендер коментарів + LLM лише на
прогалини» і Vue SFC-екстрактор):
- plugins/lang-js/doc-files/vue.mjs — .vue отримує повний факт-лист замість
unsupported/one-shot: props/emits/exposed як псевдо-експорти (об'єктна форма
defineProps({...}) і generic defineProps<Props>() з окремою interface-
декларацією), <!-- @slot --> → facts.slots, юніти зі зміщеними у файл
офсетами. vue/compiler-sfc — optional peer у package.json.
- Спільні JS regex-хелпери винесені в js-facts.mjs (без циклічного імпорту
extractors.mjs ↔ vue.mjs).
- docgen-gen/docgen-prompts: секція «Публічний API» рендериться дослівно для
JSDoc-покритих експортів (0 LLM-токенів), LLM викликається лише на прогалини
(isApiGap/renderApiLine/apiGapMessages). Працює й для Rust (спільне ядро,
той самий факт-лист {name, desc}).
Побічний улов при ширшому прогоні parseJsDoc по репо (370 файлів): 3 попередньо
існуючі баги атрибуції JSDoc, які Stage 1 тепер робить видимими напряму в доці
замість маскування LLM-перефразом — виправлено разом:
- glob-рядок 'src/**/linux.rs' читався як порожній /**/, жадібний пошук */
протікав до наступного реального коментаря;
- обгорнутий на 2 рядки @returns — хвіст падав у desc замість ret;
- багаторядковий @PARAM {{ ... }} (складний object-type) — усе тіло типу
бралось у desc.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Замінює regex-based backward-scan (precedingJsDoc/JSDOC_BEFORE_RE) на атрибуцію через список коментарів реального парсера (parseProgramAndCommentsOrNull → jsDocCommentBefore, js-facts.mjs), з regex-фолбеком лише коли парсинг не вдався. Точковий фікс (glob 'src/**/linux.rs' читався як порожній /**/) закривав лише один вузький випадок; regex за конструкцією не бачить меж //-коментарів і рядкових літералів, тож "/**"-подібний текст усередині них (напр. // приклад: export const X) все одно міг «протекти» до наступного реального */. AST-парсер уже коректно розрізняє справжні коментарі від тексту всередині інших коментарів/рядків — жодних regex-евристик тут більше не потрібно. Виправляє 4-й (раніше задокументований як невирішений) випадок: plugins/ci-azure/.../fix-service_deploy_pipeline.mjs migratePipelineFile — 602 символи змішаного коду → 70 символів чистого опису. Прогін по 370 файлах репо новий регресій не показав. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…s-llm-vue-sfc-e3a424 # Conflicts: # plugins/lang-js/doc-files/docs/extractors.md # plugins/lang-js/doc-files/docs/vue.md # plugins/lang-js/doc-files/extractors.mjs # plugins/lang-js/doc-files/tests/vue.test.mjs # plugins/lang-js/doc-files/vue.mjs # plugins/lang-js/package.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Реалізує ADR 260719-2155 — гібрид «скриптовий рендер коментарів + LLM лише на прогалини» і Vue SFC-екстрактор:
plugins/lang-js/doc-files/vue.mjs):.vueотримує повний факт-лист (orchestrated-шлях) замістьunsupported/one-shot. Props/emits/exposed стають псевдо-експортами (об'єктна формаdefineProps({...})і genericdefineProps<Props>()з окремоюinterface-декларацією — обидві покриті тестами),<!-- @slot -->→facts.slots, юніти зі зміщеними у файл офсетами.vue/compiler-sfc— optional peer уplugins/lang-js/package.json(без пакета — коректна деградація доunsupported). Спільні JS regex-хелпери винесено вjs-facts.mjs, щоб уникнути циклічного імпортуextractors.mjs↔vue.mjs.docgen-gen/docgen-prompts): секція «Публічний API» рендериться дослівно для JSDoc-покритих експортів (renderApiLine, 0 LLM-токенів), LLM викликається лише на прогалини (isApiGap/apiGapMessages). Зміна на рівні ядра — автоматично працює і для Rust (той самий факт-лист{name, desc}).Побічний улов
Ширший прогін
parseJsDocпо ~370 файлах репо виявив 3 попередньо існуючі баги атрибуції JSDoc (не внесені цим PR, але Stage 1 тепер робить їх видимими напряму в доці замість маскування LLM-перефразом) — виправлено разом:'src/**/linux.rs'читався як порожній/**/, жадібний пошук*/протікав до наступного реального коментаря, змішуючи проміжний код в опис;@returns— хвіст (продовження без@) падав уdescзамістьret;@param {{ ... }}(складний object-type) — усе тіло типу бралось уdesc.Ще один, структурно ширший випадок (
/**усередині звичайного//-коментаря, не glob) лишається невиправленим — це вимагає attach JSDoc черезcommentsз AST, а не regex по сирому тексту; окрема більша задача, не точковий фікс.Test plan
npx vitest run npm/rules/doc-files/ plugins/lang-js/ plugins/lang-rust/— 795 тестів зеленіnpx @7n/rules lint— exit 0vue.test.mjs(10 тестів на props/emits/exposed/slots/header/unsupported/offsets),isApiGap/renderApiLine/apiGapMessagesуdocgen-prompts.test.mjs,buildApiSectionуdocgen-gen.test.mjsnpm/.changes/іplugins/lang-js/.changes/🤖 Generated with Claude Code