All notable changes to this project will be documented in this file.
The format follows Keep a Changelog. This project adheres to Semantic Versioning.
0.3.0 — 2026-02-28
- Expanded default language support — CodeLens markers now activate out-of-the-box for Python, Java, Go, Kotlin, Dart, Swift, Rust, C, and C++ in addition to the existing TypeScript/TSX, JavaScript/JSX, C#, and XAML.
- Noise-line filtering for new languages —
isNoiseLineimport-directive regex extended withfrom \w(Pythonfrom x import …) anduse [\w:*{](Rustuse std::…) alternatives so import statements in those languages are correctly suppressed. - Language labels for new languages —
languageLabel()inutil.tsnow mapskotlin,dart, andswiftto human-readable names used in Copilot prompt hints (Java, Go, Rust, C, C++ were already mapped). - Test coverage for new languages — import-noise and real-code test cases added to
codeLensProvider.test.tsfor all nine new languages.
0.2.2 — 2026-02-28
explainFilecrashes mid-file — replaced unboundedPromise.allSettledfan-out with a concurrency-limited runner (max 5 simultaneous requests) to avoid overwhelming the Copilot LM API on larger files.- Ghost text lost on tab switch —
DecorationManagernow listens toonDidChangeVisibleTextEditorsand re-applies stored decorations whenever the visible editor set changes, so explanations persist when switching away and back.
- Automated test suite using
@vscode/test-electronand Mocha (tddUI), runnable vianpm test. - Unit tests for
util.ts:contentHash(hex format, determinism, key separation),truncate(boundary, ellipsis, whitespace collapse),languageLabel(all 13 known mappings + fallback). - Unit tests for
isNoiseLine: 35 cases covering blank lines, pure-punctuation, single-line comments (//,#,--,%%,;), block-comment lines, structural keywords, import/using/require/include directives, and XAML closing tags. - Unit tests for
isGeneratedFile: 16 cases covering all guarded extensions and normal files. - Integration tests for
SourceDocCodeLensProvider: generated-file guard, disabled state, all five modes, fixture-file lens count,refresh()event. - Integration tests for
DecorationManager: store/retrieve, multi-line independence, overwrite,clearForEditor,clearAll, and auto-clear on live document edit. - Mock-based tests for
ExplanationProvider: cache hit (model called once), separate code/language keys,invalidateCache(), no-model error message,LanguageModelErrorwrapping, pre-cancelled token, streamed chunk assembly. - Tests for
explainFilecommand: command registration, noise-line filtering, parallel execution via mockedvscode.lm, cancellation propagation, and error aggregation viaPromise.allSettled. src/test/fixtures/sample.ts— controlled TypeScript fixture with functions, classes, interfaces, arrow functions, and noise lines.
0.2.1 — 2026-02-27
- Split CI workflow into
ci.yml(branch/PR builds) andrelease.yml(tag-triggered Marketplace publish) to fix publish job not triggering. - Updated extension icon to a professional dark-card design with cyan highlighted code line and ghost-text tail.
- Added
scripts/gen-icon.jsto regenerate the icon without external dependencies.
0.2.0 — 2026-02-27
- Explain file command (
sourceDoc.explainFile) — explains every non-noise line in the current file in parallel viaPromise.allSettled, with a cancellable progress indicator showingN / total done. filemode — shows only the file-level$(comment) Explain fileCodeLens at line 0; no per-line or per-block lenses.nonemode — disables all CodeLens markers entirely.- Hover tooltip — hovering over truncated inline ghost text shows the full explanation.
- Generated-file guard (
isGeneratedFile) — skips CodeLens on*.d.ts,*.g.cs,*.g.i.cs,*.generated.*,*.designer.cs,*.min.js/css/mjs,*.pb.go,assemblyinfo.cs. - Noise line filtering (
isNoiseLine) — suppresses lenses on empty lines, pure-punctuation lines, comment lines, import/using directives, structural keywords (try/finally/else/do), and XAML closing tags. - Status bar icons for new modes:
$(file)forfile,$(circle-slash)fornone.
- Toggle cycle extended:
block → line → both → file → none → block. - Copilot prompt tightened to 20 words max; responses now start with a verb and omit language name and "this code" boilerplate.
isNoiseLineandisGeneratedFileexported fromcodeLensProvider.tsfor reuse inextension.ts.
0.1.0 — 2026-02-27
- CodeLens markers on every function, class, and method (block mode) and every non-empty line (line mode), with a toggleable "both" mode.
- GitHub Copilot integration via the VS Code built-in
vscode.lmAPI — no API key required. - Inline ghost text decorations rendering Copilot explanations as italic comments (
after: { contentText }) directly after the target line. - Regex fallback for block detection when the language server hasn't loaded yet, with an automatic 2.5 s retry to upgrade to symbol-accurate lenses.
- LRU cache (200 entries, keyed by content hash) to avoid redundant Copilot requests.
- Status bar item showing current mode (
block/line/both); click to cycle. - Commands:
Explain Block,Explain Line,Toggle Mode,Clear All Explanations,Refresh CodeLenses. - Configurable settings:
sourceDoc.enabled,sourceDoc.mode,sourceDoc.languages,sourceDoc.modelFamily,sourceDoc.maxExplanationLength. - Language support: TypeScript, TSX, JavaScript, JSX, C#, XAML (default); any VS Code language ID via
sourceDoc.languagessetting. - XAML-specific block detection: PascalCase element regex with up to 30-line context capture for richer Copilot prompts.
- CI workflow (GitHub Actions): compile + type-check on Ubuntu & Windows for every push and PR; VSIX packaging on pushes to
main. CONTRIBUTING.mdwith setup guide, coding conventions, and instructions for adding new language support.