Neovim release pipeline + 3 editor fixes (codelens #66, checkhealth #67, Type Health #57); Zed grammar reuse#69
Merged
Merged
Conversation
- Remove [grammars.python] block to avoid wasi-sdk (~400 MB) download and 'failed to compile grammar' errors on disk-constrained systems. - Switch from [[slash_commands]] arrays to [slash_commands.name] maps for Zed's current extension.toml schema. - Update ZED-SPEC.md with Grammar Reuse section and corrected checklist.
Document how to ship basilisk.nvim: subtree-mirror the in-tree plugin to a standalone installable repo, tag-synced to monorepo releases, with LuaRocks/nvim-lspconfig as optional secondary channels. Register in docs/INDEX.md.
…nstall path
Cite runtime/doc/{repeat,usr_05,pack}.txt confirming Neovim has no
marketplace, loads on-disk dirs, requires the plugin at the repo root
(no subdir install), and generates helptags at install time. Note
vim.pack.add() clones a whole repo and selects versions by tag/semver,
reinforcing the subtree-mirror + tag-based versioning approach, and add
a vim.pack install snippet.
Add a publish-nvim job to release.yml that, on each vX.Y.Z tag, git-subtree-splits basilisk.nvim/ to the standalone Nimblesite/basilisk.nvim mirror (the repo users install) — tagging it with the identical version so the plugin and the binary binary.lua auto-downloads stay coupled, and advancing the mirror's main only for stable tags. Document the mechanism in NEOVIM-SPEC.md [NVIM-DISTRIBUTION-RELEASE], fix the basilisk-lang -> Nimblesite org-name inconsistency across the spec, help doc, and plan, and add a vim.pack.add() install path. Versioning is tag-only.
The Type Health panel rendered "██████████ 100% — 0/0 symbols" with a green "pass" icon for a workspace with no Python files, misleadingly reading as perfectly typed. SummaryItem now branches on totalFiles === 0 to render an explicit "No Python files found" state with a neutral info icon. Adds a red→green regression test and documents the requirement under EXTACT-HEALTH. Fixes #57.
Rework the publish-nvim job to match publish-homebrew/publish-scoop
exactly: reuse BREW_SCOOP_PAT, clone the Nimblesite/basilisk.nvim mirror
via the x-access-token credential, replace its content with the
basilisk.nvim/ tree, commit as github-actions[bot] with a
'basilisk ${VERSION}' message (skip-if-unchanged), and push. Drop the
git subtree split approach (no fetch-depth:0, no extra tooling).
Keep one nvim-specific step the formula/manifest publishers don't need:
push the matching vX.Y.Z git tag so version-pinned installs
(vim.pack/lazy.nvim) resolve. Update NEOVIM-SPEC.md and the release plan
to describe the convention.
vim.lsp.codelens.refresh() is deprecated on Neovim 0.12 (warns on every Python LSP attach) and removed on 0.13 (code lens stops working). Centralize version-compatible activation in basilisk.codelens.activate(), preferring vim.lsp.codelens.enable() on 0.12+ and falling back to refresh() plus the manual BufEnter/InsertLeave loop only on 0.10/0.11 where enable() is absent. - ftplugin/python.lua: call the shared module; add a buffer-local basilisk_did_ftplugin guard so repeated FileType events don't register duplicate LspAttach handlers (the builtin b:did_ftplugin guard can't, since our ftplugin runs earlier on the runtimepath and Vim unlets it per event). - ui_spec.lua: route the code-lens test through the module so it stays green on 0.13 instead of calling the removed refresh() directly. - NEOVIM-SPEC.md: document the version-compatible Code Lens API. - codelens_spec.lua: regression tests for API preference, 0.10/0.11 fallback, and single handler registration. Fixes #66
The "Ci prep" autofix pass (a051dd3) annotated the error-test fixtures with `: Any` / `-> None`, which suppresses the BSK-E0001/E0002 diagnostics that crates/basilisk-cli/tests/cli_binary_tests.rs asserts. That broke 11 CLI tests (missing error codes, wrong exit code, absent ANSI error labels). No test code changed, so restoring these fixtures to their canonical error-triggering form (matching main) is the correct fix. Restores 30 basilisk-cli fixtures, 2 benchmark fixtures, and 1 zed fixture. Example files are intentionally left as-is.
:checkhealth basilisk called binary.resolve() with no argument, skipping the
resolver's first cascade step (the binary_path from setup()). A binary set only
via setup({ binary_path = ... }) — and used by the LSP all session — was falsely
reported as "basilisk binary not found". Forward the configured path, mirroring
the resolve(config.binary_path) call in lsp.lua.
Adds tests/lsp/health_spec.lua: stubs the resolver so the binary is reachable
only via the configured path, then asserts checkhealth reports it as found
rather than missing.
Fixes #67
The ci-prep autofix neutralized the deliberate diagnostics in the examples/ showcases (added : Any/-> None, annotated empty dicts, stripped redundant/override annotations), contradicting their inline # BSK-Exxxx / # W0050 comments and examples/README.md, and breaking ruff format --check in CI's Lint job. Restore all ten to their known-good main versions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TLDR
Ships the Neovim plugin release/distribution pipeline plus three editor bug fixes — a 0.13-safe code-lens path (#66), a
:checkhealthfix that honors the configuredbinary_path(#67), and a VS Code Type Health empty-workspace state (#57) — and reuses Zed's built-in Python grammar instead of compiling one.What Was Added?
publish-nvimjob in.github/workflows/release.ymlthat, on eachvX.Y.Ztag, mirrors thebasilisk.nvim/subtree to the standalone install repoNimblesite/basilisk.nvimand tags it with the same tag. Uses the existingpublish-homebrew/publish-scoopwrite convention (x-access-token+BREW_SCOOP_PAT, commit asgithub-actions[bot]). Documented in the newdocs/plans/NEOVIM-RELEASE-PLAN.md.basilisk.nvim/lua/basilisk/codelens.luaexposingactivate(bufnr), the single version-compatible entry point for turning on code lens.basilisk.nvim/tests/lsp/codelens_spec.lua,basilisk.nvim/tests/lsp/health_spec.lua, and a new[EXTACT-HEALTH]suite invscode-extension/src/test/suite/activity-panel.test.ts.docs/plans/EXTENSION-ACTIVITY-PANEL-ACTIONS-PLAN.md,examples/uv.lock.What Was Changed or Deleted?
ftplugin/python.luanow callsbasilisk.codelens.activate()instead of the deprecatedvim.lsp.codelens.refresh(). The module prefersvim.lsp.codelens.enable()on Neovim 0.12+ (which installs its own debounced refresh autocmds) and falls back torefresh()+ the manualBufEnter/InsertLeaveloop only on 0.10/0.11. A buffer-localbasilisk_did_ftpluginguard prevents repeatedFileTypeevents from registering duplicateLspAttachhandlers (the builtinb:did_ftpluginguard cannot, since our ftplugin runs earlier on the runtimepath and Vim unlets it per event).NEOVIM-SPEC.mdanddoc/basilisk.txtpoint atNimblesite/basilisk.nvim(wasbasilisk-lang/basilisk.nvim) and add avim.pack(Neovim 0.12+) install path.basilisk-zed/extension.tomlremoves the[grammars.python]block so Zed reuses its built-in tree-sitter-python grammar instead of compiling from source (which pulls the ~400 MBwasi-sdktoolchain and can fail withfailed to compile grammar 'python'/No space left on device). Also migrates[[slash_commands]]array-of-tables entries to[slash_commands.<name>]table syntax.health.luanow forwards the configuredbinary_pathtobinary.resolve()(it previously calledresolve()with no argument), so:checkhealth basiliskno longer falsely reports "binary not found" for a binary set viasetup({ binary_path = ... }).SummaryItem(now exported) rendersNo Python files foundwith a neutralinfoicon whentotalFiles === 0, instead of a misleading 100% coverage bar and green "pass" icon for 0/0 symbols.examples/*.pyupdated to add explicitAnyparameter annotations and-> Nonereturns; regeneratedmutation_testing/report. (CLI/benchmark/zed test fixtures were left at their canonical error-triggering form — an autofix pass that had mangled them is reverted in this branch socli_binary_testskeep asserting realE0001/E0002output.)How Do The Automated Tests Prove It Works?
make cistatus: Rust (1829+ tests, PEP conformance, coverage threshold), Zed (96 tests), and Rust + VS Code lint all pass. The VSIX and Neovim e2e phases failed only on local-environment issues — a broken VS Code 1.122.1 test download (@vscode/policy-watchermissing) and a nondeterministic nvim childSIGTERMunder load — not on any branch code; all nvim/health/codelens assertions pass. CI runners are the gate for those e2e phases.codelens_spec.lua— three cases: (1) "prefersvim.lsp.codelens.enableover deprecated refresh on Neovim 0.12+" assertsenable(true,{bufnr})is called exactly once andrefreshnever; (2) "falls back torefreshon 0.10/0.11 where enable is absent"; (3) "registers its LspAttach handler only once when the filetype is set repeatedly" asserts a singleLspAttachautocmd / single activation after twoFileTypeevents. Theui_spec.luareal-LSP code-lens test now routes throughbasilisk.codelens.activateso it stays green on 0.13.activity-panel.test.ts[EXTACT-HEALTH]— "empty workspace shows 'No Python files found', never a 100% bar" (asserts no%and no█/░bar glyphs), "empty workspace uses a neutral info icon, not a green pass" (assertsiconPath.id === "info"), and "measured workspace still renders the coverage bar and percentage" (asserts85%,17/20, and█).health_spec.lua[issue #67]— stubs the resolver so the binary is reachable only via the configured path, then asserts:checkhealth"does not report 'binary not found' when binary_path is configured" and "reports the configured binary as found".Spec / Doc Changes
NEOVIM-SPEC.md— version-compatible Code Lens API row; new{#NVIM-DISTRIBUTION-RELEASE}(mirror + tag-only versioning).ZED-SPEC.md— new{#ZED-GRAMMAR}section documenting built-in grammar reuse.EXTENSION-ACTIVITY-PANEL-SPEC.md— empty-workspace[EXTACT-HEALTH]rule and action-affordance sections.NEOVIM-RELEASE-PLAN.md,EXTENSION-ACTIVITY-PANEL-ACTIONS-PLAN.md;docs/INDEX.mdandNEOVIM-PLAN.mdupdated.Breaking Changes
Nimblesite/basilisk.nvim(docs updated accordingly).Closes #66. Closes #57. Closes #67.