Releases: coc-plugin/coc-vscode-loader
Releases · coc-plugin/coc-vscode-loader
Release list
v1.6.4
What's New
- prebuilt VSIX support — New
prebuiltregistry field forkind: moduleservers. Pipeline auto-downloads compiled server from VS Code marketplace instead of building from source (TypeScript, wasm, etc.). - 4 new registry entries:
vscode-bitbake(Yocto BitBake),vscode-jq(jq),vscode-alex(AlexJS linter),vscode-write-good(Write Good linter) - pip install --upgrade — All pip package installations now use
--upgradeto resolve dependency conflicts
Changes
- converter: bump to v1.6.4
- plugin: bump to v1.6.4
- Documentation updates across all files
v1.6.3
[1.6.3] - 2026-06-28
Added
- Documentation —
config-driven-converter.mdandvscode-vs-coc-api-diff.md: documenteditor.edit()→workspace.applyEdit()replacement strategy and Prettier registry patches withforceFormatDocumentcommand alias. - Registry API compatibility patches — Generic cross-plugin fixes in
coc-vscode-registry:Uri.joinPath()→path.join()replacement pattern for environments without full VS Code URI APIworkspace.fs.writeFile()→fs.promises.writeFile()replacementcreateConfigFilestub replaced with full implementation using coc.nvim workspace APIs (interactive directory selection, validation, error reporting)applyEditrule updated to use workspace APIdocument.textDocumentfallback forgetText()/positionAt()to support both TextDocument and TextEditorallRangeLanguagesextended with css, less, scss, html, markdown, yaml
Fixed
- Prettier compatibility patches — Comprehensive registry-level fixes for
vscode-prettier-vscode:uri.schemechecks converted toString(uri).startsWith('file://')for cross-editor compatibilityeditor.edit()replaced witheditor.document.applyEdits()for coc.nvim (note:Document.applyEdits()returns success but doesn't modify Neovim buffer — converter now usesworkspace.applyEdit()instead)uri.fsPath→Uri.parse(uri).fsPaththroughout (with negative lookbehind(?<!\?\.)to skip optional chaining)Uri.joinPath()→path.join()for environments without full VS Code URI APIworkspace.fs.writeFile()→require('fs').promises.writeFile()createConfigFilestub replaced with full implementation using coc.nvim workspace APIs (interactive directory selection viacoc#util#with_callback, filesystem validation, error reporting)document.getText()→(document.textDocument || document).getText()— handles bothDocumentandTextDocumentdocument.positionAt(→(document.textDocument || document).positionAt(— same reasonrangeEnd/rangeStartstrictundefinedcomparison instead of truthy checkforceFormatDocument+formatFilecommands registration — addsprettier.formatFilealias- Extended
allRangeLanguageswith css, less, scss, html, markdown, yaml
import-mappingshowMessageWrap— duplicatevscode.prefix — The${prefix}template variable was applied twice: once onPromise.resolve()and again onwindow.showMessage(), generating malformed output likevscode.vscode.window.showMessage(). Removed the redundant outer prefix. FixesshowInformationMessage/showWarningMessage/showErrorMessageconversions for all plugins.import-mapping.import()false match — Theimport()→require()regex(?<!\w)lookbehind was too broad, incorrectly matching method/property calls like.import()orthis.import(). Tightened to(?<![\w.)$])to exclude property access, chained calls, and template literal expressions. Added test coverage for.import()andthis.import().- vscode-gitignore buffer not refreshing after file generation — Added source-level registry patches: (1) replace
vscode.Promise.resolve(withPromise.resolve(to fixshowSuccessMessagecrash in coc.nvim; (2) callworkspace.nvim.command('checktime')after writing.gitignoreto force Neovim buffer reload from disk.
Changed
- converter: bump to v1.6.3
- plugin: bump to v1.6.3
- Baseline: updated for multiple entries — rust-analyzer, ng-language-service, deno, astro, yaml, ansible, taplo, gitignore, code-runner (converter changes); prettier-vscode, ruff-vscode, volar, html-language-features, css-ls, tinymist (upstream changes); ansible, biome (upstream baseline sync)
Registry Updates
vscode-biome— baseline synced with upstream
v1.6.2
[1.6.2] - 2026-06-26
Added
- Registry update checker CI workflow — daily automated detection of upstream VS Code extension changes.
registry-check.ymlruns twice daily (04:00/16:00 UTC), auto-creates PRs when converter output differs from baseline, and creates Issues on failures (repo removed, archived, converter errors). Supports max 8 parallel entries.- Matrix generation (
generate-matrix.ts): flat array output, orphaned entry detection, source repo change detection, corrupted baseline handling - Per-entry checker (
registry-check-entry.ts): remote HEAD check, source sync, conversion, SHA-256 hashing, baseline comparison, PR/Issue creation with labels (registry-update,repo-removed,repo-archived,converter-failure) - PR body includes upstream diff with GitHub compare links, per-file diff details with 25KB/file + 50KB total truncation limits
- Caching: repo cache in
~/.cache/coc-converter-smoke/, remote URL verification before reuse,git fetch --depth 1incremental updates
- Matrix generation (
switch.shimprovements —cleanup_plugins()removes orphanedfile:symlink entries when switching modes; auto-builds plugin after local switch; cleans converter-cache; fixes npm 11 path resolution; ensures TypeScript installed in coc-tsserver node_modules- Registry update checker documentation — full workflow docs translated to English in
docs/registry-update-checker.md, CI badge and automated change detection section in README, workflow/PR management docs in AGENTS.md, post-merge baseline update instructions in CONTRIBUTING.md
Fixed
- CI robustness — 20+ fixes to registry-check workflow:
- Proper non-zero exit codes on all error paths instead of silent success
git push --force-with-leasereplaces unsafe--forcegit()wrapper resolves CWD issues whenworking-directory: converter- Default branch detection via API instead of hardcoded
main - Reorder baseline update to after rebase, preventing unstaged changes conflicts
- Rate-limit (429) handling in
getRemoteHead(), error logging for hash failures - Stale cache detection: verify remote URL before reusing clones
- Guard
checkjob withneeds.discover.result == 'success' - Upstream tracking (
-u) for new branches, skip closed PRs - Label caching for batch entry processing,
checkArchived()error hardening - Sync commit accuracy: use
synced.commitinstead ofremote.head
Changed
- Baseline updates — refreshed for vscode-go, vscode-ruff, vscode-pyright, vscode-ansible, vscode-texlab, vscode-uni-app-snippets, vscode-uni-cloud-snippets, vscode-uni-ui-snippets due to upstream extension changes
- plugin: bump to v1.6.2
- converter: bump to v1.6.2
v1.6.1
v1.6.1 - 2026-06-24
Added
- Loader self-update notification in TUI — checks npm registry for newer version, shows
↑ vX.Y.Zin header. - Updated TUI preview screenshot for v1.6.x.
Fixed
[update]false positive for mono-repo entries — abbreviated hash length mismatch (%h>7 chars vssubstring(0,7)). Fixed tostartsWithcomparison and%Hfull hash.- Help header padding — balanced spacing inside gold background.
Changed
- TUI header — version number removed to avoid screenshot churn on releases.
- plugin/converter bumped to v1.6.1
v1.6.0
v1.6.0 - 2026-06-24
Added
autoInsertionoption for language-client step — generates auto-close tag and auto-quote attribute handlers viahtml/autoInsertcustom LSP request.semanticTokensoption for language-client step — generatesDocumentSemanticTokensProviderregistration with server-provided legend.initializationOptionsdocumented — for passing config to LanguageClient on init.
Changed
- All Chinese documentation and comments translated to English.
- converter bumped to v1.6.0 (synced with plugin version).
- plugin bumped to v1.6.0.
Registry Updates
vscode-css-ls— added to baselinevscode-html-ls— added to baseline with autoInsertion + semanticTokens support
v1.5.9
v1.5.9 — Cross-version change detection
This release replaces the "reinstall everything" workflow with targeted change detection. After upgrading coc-vscode-loader, the loader automatically detects which installed plugins' output files changed and marks them with [changed] in the TUI. Only those need reinstalling.
Added
- Cross-version change detection — SHA-256 baseline comparison system in
plugin/src/baseline.ts:CocCommand loader.whatChanged— shows cross-version diff with file-level granularity- Persisted
[changed]markers survive full nvim restarts viachanged-markers.json - Startup auto-check: compares current baseline against saved snapshot on version change
clearChangedMarker()called on install/update/reinstall to clear stale markers- Snapshot+marker atomicity: markers only persisted when snapshot write succeeds
Fixed
[changed]markers no longer lost after closing and reopening nvim (persisted to disk)
Changed
- Plugin bumped to v1.5.9
- 11 CocCommands (10 user + 1 internal dispatch)
v1.5.8
v1.5.8 - 2026-06-23
Added
- Registry baseline diff system (
diff:baseline/diff:check) notesfield,languages.matchpolyfill, build failure on subprocess errors- Pipeline fixture tests, Windows compatibility plan
Fixed
showMessagePromise return — Promise.resolve wrapping + extra arg strippingshowInformationMessageseverity —"info"→"more"(coc.nvim MsgTypes:"error"|"warning"|"more")- Format provider priority with trailing commas — prettier silently not formatting when tsserver active
- Ansible LSP locale,
createOutputChannelmapping,vscode.prefix in workspaceFolders
Changed
- CI pipeline: diff job separated from unit tests
- converter + plugin: bump to v1.5.8
v1.5.7
What's Changed
Added
- Vim 9.0+ support — TUI now works in Vim (split window + text properties) in addition to Neovim (floating window + extmark). Auto-detects editor at runtime. New
EditorAPIabstraction layer withNvimEditor/VimEditorbackends,batchRender()single-RPC Vim render,timer_start(0, ...)deferred redraw. Covers 83/86 features with identical 19 keymaps. excludeDepsfield —SourceStepnow supportsexcludeDeps: string[]to filter out unwanted dependencies from source extensions. Supports prefix matching (e.g.@wdiomatches@wdio/cli,@wdio/local-runner). Use withkeepDepsto replace vendored/broken deps with proper npm versions.- Code Runner (
vscode-code-runner) — added to registry asdirect-api, 12 source patches for coc compatibility (createTerminal, setContext, env.shell, lineAt, outputChannel dispose+recreate, etc.)
Fixed
workspace.saveAll— added patch support for coc.nvim which lacks this APIworkspaceFolders[N].uri.fsPath— converter regex didn't handle array-indexed access ([0],.find()); added patches for workspaceResolverwindow.activeTextEditorpolyfill — status bar now shows immediately on startup (added"*"to activationEvents).fileNameregex — added(?<![\w$])negative lookbehind to prevent matching_document.fileNameasdocument.fileName, which causedthis._Uri.parse(document.uri).fsPathmangling.uri.fsPathregex — restricted first character to[a-zA-Z_$]to avoid matching0.uri.fsPathfrom array index accessworkspace.workspaceFoldersguard — added(?:vscode\.)?prefix to handlevscode.workspace.workspaceFolderswithout producingvscode.(...)syntax error- LanguageClient transform — fixed matching
NewExpressioninstead ofCallExpressionsonew LanguageClient(...)is actually transformed - Version compatibility — fixed pre-release version comparison with NaN components
- Balanced-parenthesis matching — for
Location.create(Uri.file(...), ...),new CodeAction(...), andregisterDocumentFormatProvidertransforms
Changed
- converter: bump to v1.5.7
- plugin: bump to v1.5.7
v1.5.6
What's Changed
Fixed
- Error handling — replace
console.error+process.exit(1)with thrown errors; add try-catch aroundpackage.jsonparse; skip.d.tsduring text replacements - Cross-platform URI decoding — fix
file://URI decoding withdecodeURIComponent; handle optional leading/in hover fallback - Converter robustness — balanced-parenthesis parsing for
registerDocumentFormatProvider/registerDocumentRangeFormatProvider; gracefulfile.replaceWithText()failure handling; restrict severity regex to avoid false positives - Registry resilience — guard against clearing installed packages when remote registry returns empty; add
console.warnon fetch failure - Pipeline fixes — fix platform placeholder comparison; use backtick-delimited git log parsing for special chars; refactor
rimrafintospawnPromisehelper; surface task failures viarunConcurrent - TUI stability — add
.catch()to async calls to prevent unhandled rejections; fix typoplacehold→placeholder loader.listoutput — escape single quotes in package names- Converter
contributesfallback — resolvecontributesfrom parentpackage.jsonwhen subdirectory has none
Changed
- converter: bump to v1.5.6
- plugin: bump to v1.5.6
v1.5.5
v1.5.5
Added
loader.reinstallcommand — reinstall a package (git clone + convert + build + install)loader.listcommand — list installed packages and copy to clipboard (dual Lua/VimL format)loader.cleanCachecommand — clean source/build directories for all packages with cache size display- Auto-parentheses middleware for LanguageClient — appends
($0)snippet placeholder to function/method completion items. Works in bothprovideCompletionItemandresolveCompletionItem, controllable viaautoParenthesesoption in registry config (default:true) - LANG normalization — replaces underscores with hyphens in
process.env.LANGto fixIntl.Collatorfailures caused by coc.nvim'sgetLocale()splitting on'.' --convert-fileargument forconvert-plugin.shandtest-convert.shscriptsnoExternalfield in registry — dependencies to bundle instead of externalizing (handles ESM-only transitive deps)- Error log display in TUI — show full command output for failed packages on
<CR>
Fixed
- Dynamic import transform — handle nested parentheses in
.then()callbacks viareplaceBalanced, fixing false matches onimport('vscode')without.then() - Trigger parameter hints — append
editor.action.triggerParameterHintscommand to completion items using($0)snippet format - TUI error state — clear
progressLoganderroron terminal status transitions (installed/not-installed) - Detached HEAD checkout in
switch.sh— replaced Linux-onlyreadlink -fwith cross-platformnode -p fs.realpathSync - Uninstall race — wrap
package.jsonmutation inwithPkgJsonLockmutex
Changed
PackageInfo.type— accept'snippets'for snippet-only extension support- converter: bump to v1.5.5
- plugin: bump to v1.5.5