Skip to content
This repository was archived by the owner on Sep 11, 2026. It is now read-only.

feat(plugins): фаза 5b lang-плагінів — doc-files JS-специфіка у @7n/rules-lang-js - #143

Merged
vitaliytv merged 1 commit into
mainfrom
claude/lang-plugins-phase5b
Jul 19, 2026
Merged

vitaliytv merged 1 commit into
mainfrom
claude/lang-plugins-phase5b

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що зроблено (фаза 5b spec lang-plugins-extraction)

Після винесення taze (фаза 5a, #140) — doc-files JS-специфіка їде з ядра у @7n/rules-lang-js. Ціль спеки «у ядрі не лишилось жодного мовно-специфічного модуля» для doc-files тепер досягнута.

@7n/rules-lang-js

  • Маніфест декларує contributes.docFiles.extensions: .js/.mjs → JS Module, .ts → TS Module, .vue → Vue Component (hot-path hook читає синхронно) і handler doc-files: './doc-files/extractors.mjs'.
  • doc-files/extractors.mjs — колишній docgen-extract ядра: extractFacts (факт-лист js/mjs/ts; .vue → unsupported → whole-file шлях, як і раніше) + default-експорт екстрактора за патерном lang-rust.
  • doc-files/units-js.mjs — oxc AST юніт-шар (колишній units-js ядра), extractUnits.

Ядро

  • docgen-scan: SOURCE_EXTENSIONS видалено — isSourceFile бере розширення лише з декларацій активних lang-плагінів (root тепер обовʼязковий параметр).
  • docgen-crc: EXT_TYPES видалено — OKF-тип доки з тих самих декларацій, fallback Source File.
  • docgen-gen: без статичного імпорту extractFacts — факт-лист лише від плагінного екстрактора, інакше generic unsupported (whole-file).
  • Видалені: docgen-extract/, units-js/, units/ (мертвий фасад — у конвеєрі не використовувався).
  • docgen-extract-anchors свідомо лишився в ядрі: анкори (URL/config/error-маркери) — текст-рівневі, не мовний парсинг.
  • Тести: спільний хелпер installFakeLangJsPlugin (фейковий плагін у tmp-репо) — без нього після 5b скан у tmp-дереві не бачить джерел.

Поведінкова зміна

Без активного lang-плагіна doc-files-скан не бачить жодного джерела (graceful тиша). Для споживачів це прозоро: lang-js автодетектиться за package.json і доставляється першим запуском npx @7n/rules; hot-path hook мовчить лише до першої доставки плагіна. Дрібниця: мітка .cjs → JS Module зникла (у кандидати .cjs ніколи не входив — мапа й скан тепер єдине джерело).

Верифікація

  • Тести: ядро 2665 ✅, lang-js 28 ✅, lang-rust 55 ✅, lang-python 43 ✅.
  • lint --base origin/main — 0 порушень (25/25 концернів).
  • Live: hook цього репо працює через плагінний шлях (dogfood); генерація док для нових файлів плагіна пройшла orchestrated-шляхом через плагінний extractFacts (docgen знову живий після фікса pi-ai у llm-lib 2.8.2); tmp-репо без плагіна → скан порожній; .rs/.vue/.py детектяться з маніфестів.

Після мерджу

  • @7n/rules-lang-js досі не опублікований (перший publish упав на ENEEDAUTH) — потрібен OIDC trusted publisher на npm, потім rerun failed job — опублікується вже 0.3.0 з doc-files.

Хвіст фази 5 (окремий інкремент)

  • JS-сімʼя lint-правил (js/bun/vue/js-run/test/npm-module) → lang-js.

🤖 Generated with Claude Code

…ules-lang-js, ядро без вбудованих кодових розширень

- @7n/rules-lang-js: маніфест декларує docFiles.extensions (js/mjs/ts/vue + OKF-типи) і handler doc-files; extractFacts (факт-лист js/mjs/ts) та extractUnits (oxc AST юніт-шар) переїхали з ядра
- ядро: docgen-scan/docgen-crc/docgen-gen читають розширення, типи й екстрактори лише з активних lang-плагінів; SOURCE_EXTENSIONS/EXT_TYPES/units-js/docgen-extract/units-фасад видалені
- без активного lang-плагіна скан не бачить джерел (graceful тиша); тести doc-files — фейковий lang-js через installFakeLangJsPlugin

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit b2cf8d0 into main Jul 19, 2026
5 of 7 checks passed
@vitaliytv
vitaliytv deleted the claude/lang-plugins-phase5b branch July 25, 2026 05:03
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant