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

feat(plugins): фаза 4a lang-плагінів — doc-files extension-point, Rust-екстрактори в плагіні - #134

Merged
vitaliytv merged 1 commit into
mainfrom
claude/lang-plugins-phase4
Jul 18, 2026
Merged

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

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що зроблено

Фаза 4a спеки lang-plugins-extraction — другий порт після taze: мовна специфіка doc-files виїхала з ядра.

  • Розширення — декларативно в маніфесті (n-rules.contributes.docFiles.extensions: .rs → Rust Module у lang-rust, .py → Python Module у lang-python). Ключове дизайн-рішення: hot-path (doc-files/check у PostToolUse-hook на кожен файл) читає їх синхронно без динамічного import — новий lang-extensions.mjs з кешем на процес.
  • Екстрактори — handler-модулем (contributes.handlers['doc-files']), вантажаться лише на асинхронному шляху генерації: extractFactsRust (header/exports з exposure-атрибутами/imports/markers) + extractUnitsRs переїхали в plugins/lang-rust/doc-files/ (git mv). Python спеціалізованих екстракторів не мав — лише декларація розширення.
  • Ядро: SOURCE_EXTENSIONS = js/mjs/ts/vue; isSourceFile(file, root) консультується з плагінними деклараціями; тип-мітки в docgen-crc — так само; generateDoc бере плагінний extractFacts з пріоритетом; units-фасад лишився js-only (продакшн-споживачів не мав — comment-hybrid у планах).
  • Наслідок для чисто-JS репо: .rs/.py тихо не документуються без lang-плагіна — той самий принцип, що й у taze/lint-правилах (у Rust/Python-репо плагін автодетектиться).

Верифікація

  • 3052 тестів зелені (126 doc-files, 55 lang-rust включно з перенесеними units-rs/extract-тестами).
  • Live на цьому репо: pluginDocFilesExtensions → {'.rs','.py'} з маніфестів, loadDocFilesExtractors → rust-екстрактор працює, isSourceFile('lib.rs', root) = true (без root — false, hot-path fallback).
  • npx @7n/rules lint --base origin/main — чистий; повний lint doc-files прогін згенерував доки нових/змінених модулів (галюцинації локальної генерації вичищені вручну).

Далі

Фаза 4b — SKILL-фрагменти (мовні секції taze SKILL.md композицією з плагінів) — окремим PR: інша механіка (sync-час, не runtime).

🤖 Generated with Claude Code

…t-екстрактори в плагіні

Другий порт spec lang-plugins-extraction: мовна специфіка doc-files виїхала
з ядра. Розширення (.rs → 'Rust Module', .py → 'Python Module') декларуються
в МАНІФЕСТІ плагіна (contributes.docFiles.extensions) — hot-path hook читає
їх синхронно без динамічного import (lang-extensions.mjs, кеш на процес);
екстрактори фактів/юнітів — handler-модулем (handlers['doc-files'],
вантажиться лише на шляху генерації). extractFactsRust + units-rs переїхали
в plugins/lang-rust/doc-files (git mv); ядро документує js/mjs/ts/vue
вбудовано, .rs/.py — за активним lang-плагіном (isSourceFile(file, root)).
Live: extensions/extractors резолвляться з маніфестів обох плагінів,
extractFactsRust працює через extension-point.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit 3038102 into main Jul 18, 2026
5 of 7 checks passed
@vitaliytv
vitaliytv deleted the claude/lang-plugins-phase4 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