Skip to content

Releases: coc-plugin/coc-vscode-loader

v1.6.4

Choose a tag to compare

@ChuYanLon ChuYanLon released this 03 Jul 02:25

What's New

  • prebuilt VSIX support — New prebuilt registry field for kind: module servers. 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 --upgrade to resolve dependency conflicts

Changes

  • converter: bump to v1.6.4
  • plugin: bump to v1.6.4
  • Documentation updates across all files

v1.6.3

Choose a tag to compare

@ChuYanLon ChuYanLon released this 28 Jun 05:25

[1.6.3] - 2026-06-28

Added

  • Documentationconfig-driven-converter.md and vscode-vs-coc-api-diff.md: document editor.edit()workspace.applyEdit() replacement strategy and Prettier registry patches with forceFormatDocument command 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 API
    • workspace.fs.writeFile()fs.promises.writeFile() replacement
    • createConfigFile stub replaced with full implementation using coc.nvim workspace APIs (interactive directory selection, validation, error reporting)
    • applyEdit rule updated to use workspace API
    • document.textDocument fallback for getText()/positionAt() to support both TextDocument and TextEditor
    • allRangeLanguages extended with css, less, scss, html, markdown, yaml

Fixed

  • Prettier compatibility patches — Comprehensive registry-level fixes for vscode-prettier-vscode:
    • uri.scheme checks converted to String(uri).startsWith('file://') for cross-editor compatibility
    • editor.edit() replaced with editor.document.applyEdits() for coc.nvim (note: Document.applyEdits() returns success but doesn't modify Neovim buffer — converter now uses workspace.applyEdit() instead)
    • uri.fsPathUri.parse(uri).fsPath throughout (with negative lookbehind (?<!\?\.) to skip optional chaining)
    • Uri.joinPath()path.join() for environments without full VS Code URI API
    • workspace.fs.writeFile()require('fs').promises.writeFile()
    • createConfigFile stub replaced with full implementation using coc.nvim workspace APIs (interactive directory selection via coc#util#with_callback, filesystem validation, error reporting)
    • document.getText()(document.textDocument || document).getText() — handles both Document and TextDocument
    • document.positionAt((document.textDocument || document).positionAt( — same reason
    • rangeEnd/rangeStart strict undefined comparison instead of truthy check
    • forceFormatDocument + formatFile commands registration — adds prettier.formatFile alias
    • Extended allRangeLanguages with css, less, scss, html, markdown, yaml
  • import-mapping showMessageWrap — duplicate vscode. prefix — The ${prefix} template variable was applied twice: once on Promise.resolve() and again on window.showMessage(), generating malformed output like vscode.vscode.window.showMessage(). Removed the redundant outer prefix. Fixes showInformationMessage/showWarningMessage/showErrorMessage conversions for all plugins.
  • import-mapping .import() false match — The import()require() regex (?<!\w) lookbehind was too broad, incorrectly matching method/property calls like .import() or this.import(). Tightened to (?<![\w.)$]) to exclude property access, chained calls, and template literal expressions. Added test coverage for .import() and this.import().
  • vscode-gitignore buffer not refreshing after file generation — Added source-level registry patches: (1) replace vscode.Promise.resolve( with Promise.resolve( to fix showSuccessMessage crash in coc.nvim; (2) call workspace.nvim.command('checktime') after writing .gitignore to 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

Choose a tag to compare

@ChuYanLon ChuYanLon released this 26 Jun 09:18

[1.6.2] - 2026-06-26

Added

  • Registry update checker CI workflow — daily automated detection of upstream VS Code extension changes. registry-check.yml runs 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 1 incremental updates
  • switch.sh improvementscleanup_plugins() removes orphaned file: 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-lease replaces unsafe --force
    • git() wrapper resolves CWD issues when working-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 check job with needs.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.commit instead of remote.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

Choose a tag to compare

@ChuYanLon ChuYanLon released this 24 Jun 09:22

v1.6.1 - 2026-06-24

Added

  • Loader self-update notification in TUI — checks npm registry for newer version, shows ↑ vX.Y.Z in header.
  • Updated TUI preview screenshot for v1.6.x.

Fixed

  • [update] false positive for mono-repo entries — abbreviated hash length mismatch (%h >7 chars vs substring(0,7)). Fixed to startsWith comparison and %H full 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

Choose a tag to compare

@ChuYanLon ChuYanLon released this 24 Jun 08:31

v1.6.0 - 2026-06-24

Added

  • autoInsertion option for language-client step — generates auto-close tag and auto-quote attribute handlers via html/autoInsert custom LSP request.
  • semanticTokens option for language-client step — generates DocumentSemanticTokensProvider registration with server-provided legend.
  • initializationOptions documented — 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 baseline
  • vscode-html-ls — added to baseline with autoInsertion + semanticTokens support

v1.5.9

Choose a tag to compare

@ChuYanLon ChuYanLon released this 23 Jun 16:58

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 via changed-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

Choose a tag to compare

@ChuYanLon ChuYanLon released this 23 Jun 09:12

v1.5.8 - 2026-06-23

Added

  • Registry baseline diff system (diff:baseline / diff:check)
  • notes field, languages.match polyfill, build failure on subprocess errors
  • Pipeline fixture tests, Windows compatibility plan

Fixed

  • showMessage Promise return — Promise.resolve wrapping + extra arg stripping
  • showInformationMessage severity"info""more" (coc.nvim MsgTypes: "error"|"warning"|"more")
  • Format provider priority with trailing commas — prettier silently not formatting when tsserver active
  • Ansible LSP locale, createOutputChannel mapping, vscode. prefix in workspaceFolders

Changed

  • CI pipeline: diff job separated from unit tests
  • converter + plugin: bump to v1.5.8

v1.5.7

Choose a tag to compare

@ChuYanLon ChuYanLon released this 22 Jun 01:57

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 EditorAPI abstraction layer with NvimEditor / VimEditor backends, batchRender() single-RPC Vim render, timer_start(0, ...) deferred redraw. Covers 83/86 features with identical 19 keymaps.
  • excludeDeps fieldSourceStep now supports excludeDeps: string[] to filter out unwanted dependencies from source extensions. Supports prefix matching (e.g. @wdio matches @wdio/cli, @wdio/local-runner). Use with keepDeps to replace vendored/broken deps with proper npm versions.
  • Code Runner (vscode-code-runner) — added to registry as direct-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 API
  • workspaceFolders[N].uri.fsPath — converter regex didn't handle array-indexed access ([0], .find()); added patches for workspaceResolver
  • window.activeTextEditor polyfill — status bar now shows immediately on startup (added "*" to activationEvents)
  • .fileName regex — added (?<![\w$]) negative lookbehind to prevent matching _document.fileName as document.fileName, which caused this._Uri.parse(document.uri).fsPath mangling
  • .uri.fsPath regex — restricted first character to [a-zA-Z_$] to avoid matching 0.uri.fsPath from array index access
  • workspace.workspaceFolders guard — added (?:vscode\.)? prefix to handle vscode.workspace.workspaceFolders without producing vscode.(...) syntax error
  • LanguageClient transform — fixed matching NewExpression instead of CallExpression so new LanguageClient(...) is actually transformed
  • Version compatibility — fixed pre-release version comparison with NaN components
  • Balanced-parenthesis matching — for Location.create(Uri.file(...), ...), new CodeAction(...), and registerDocumentFormatProvider transforms

Changed

  • converter: bump to v1.5.7
  • plugin: bump to v1.5.7

v1.5.6

Choose a tag to compare

@ChuYanLon ChuYanLon released this 21 Jun 12:12

What's Changed

Fixed

  • Error handling — replace console.error + process.exit(1) with thrown errors; add try-catch around package.json parse; skip .d.ts during text replacements
  • Cross-platform URI decoding — fix file:// URI decoding with decodeURIComponent; handle optional leading / in hover fallback
  • Converter robustness — balanced-parenthesis parsing for registerDocumentFormatProvider/registerDocumentRangeFormatProvider; graceful file.replaceWithText() failure handling; restrict severity regex to avoid false positives
  • Registry resilience — guard against clearing installed packages when remote registry returns empty; add console.warn on fetch failure
  • Pipeline fixes — fix platform placeholder comparison; use backtick-delimited git log parsing for special chars; refactor rimraf into spawnPromise helper; surface task failures via runConcurrent
  • TUI stability — add .catch() to async calls to prevent unhandled rejections; fix typo placeholdplaceholder
  • loader.list output — escape single quotes in package names
  • Converter contributes fallback — resolve contributes from parent package.json when subdirectory has none

Changed

  • converter: bump to v1.5.6
  • plugin: bump to v1.5.6

v1.5.5

Choose a tag to compare

@ChuYanLon ChuYanLon released this 20 Jun 15:04

v1.5.5

Added

  • loader.reinstall command — reinstall a package (git clone + convert + build + install)
  • loader.list command — list installed packages and copy to clipboard (dual Lua/VimL format)
  • loader.cleanCache command — 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 both provideCompletionItem and resolveCompletionItem, controllable via autoParentheses option in registry config (default: true)
  • LANG normalization — replaces underscores with hyphens in process.env.LANG to fix Intl.Collator failures caused by coc.nvim's getLocale() splitting on '.'
  • --convert-file argument for convert-plugin.sh and test-convert.sh scripts
  • noExternal field 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 via replaceBalanced, fixing false matches on import('vscode') without .then()
  • Trigger parameter hints — append editor.action.triggerParameterHints command to completion items using ($0) snippet format
  • TUI error state — clear progressLog and error on terminal status transitions (installed/not-installed)
  • Detached HEAD checkout in switch.sh — replaced Linux-only readlink -f with cross-platform node -p fs.realpathSync
  • Uninstall race — wrap package.json mutation in withPkgJsonLock mutex

Changed

  • PackageInfo.type — accept 'snippets' for snippet-only extension support
  • converter: bump to v1.5.5
  • plugin: bump to v1.5.5