Skip to content

jsvim: JavaScript/TypeScript support, modular language architecture, and DX overhaul#1

Open
fulsomenko wants to merge 1 commit into
masterfrom
jsvim
Open

jsvim: JavaScript/TypeScript support, modular language architecture, and DX overhaul#1
fulsomenko wants to merge 1 commit into
masterfrom
jsvim

Conversation

@fulsomenko
Copy link
Copy Markdown
Owner

Summary

  • New language modules: JavaScript/TypeScript (jsvim), Java (jvim), C# (sharpvim), Rust, Zig, R — each as a standalone Nix module under `nix/languages/`
  • Modular flake.nix: Refactored from a monolithic file into a composable structure with shared `nix/lib.nix` helpers
  • LSP migration: Moved from deprecated `lspconfig` to `vim.lsp.config` API across the entire LSP layer
  • Debugging: Full nvim-dap support for Java and C# (consolidated into the main debug config)
  • DX overhaul: Improved options/keymaps, snacks config, plugin declarations, and a new `lua/jsvim/health.lua` healthcheck module
  • Repo infrastructure: GitHub issue templates, PR template, CI workflow, LICENSE, comprehensive docs (`installation.md`, `language-packages.md`, `adding-languages.md`, `CONTRIBUTING.md`, `CHANGELOG.md`)

Test plan

  • `nix flake check` passes (CI workflow enforces this)
  • Each language variant builds: `nix build .#jsvim`, `.#jvim`, `.#sharpvim`, `.#zvim`
  • LSP attaches correctly for JS/TS, Java, C#, Rust, Zig, R files
  • DAP sessions launch for Java and C#
  • `:checkhealth jsvim` reports no errors

🤖 Generated with Claude Code

BREAKING: rename default flake output `nvim` -> `jsvim`. Binary aliases
(`nvim`, `vim`) preserved, so day-to-day shell usage is unchanged.

Make per-language nix modules the single source of truth: each
`nix/languages/*.nix` now declares its `formatters`, `linters`, `lspName`
and runtime deps, and a new `mkLanguagePackage` helper in `nix/lib.nix`
collapses ~600 lines of duplicated `packageDefinitions` in `flake.nix`.
Lua reads merged formatter/linter tables via `nixCats.extra("languageConfig.*")`,
so adding a language no longer requires touching the format/lint lua files.

JS/TS DX:
- Add eslint, jsonls, yamlls, cssls, html, tailwindcss, emmet LSPs
  with language-aware root_markers and SchemaStore-backed schemas.
- Fix ts_ls settings (drop bogus `displayStringForProperties`; add
  valid inlayHints / code lens / preferences).
- Rewrite nvim-dap-js around vscode-js-debug's dapDebugServer; add
  launch configs for node, tsx, npm script picker, jest, vitest.
- Wire eslint_d via nvim-lint and prettier(d) for js/ts/json/html/
  css/yaml/markdown/graphql/vue/svelte via conform.
- Add nvim-ts-autotag, nvim-ts-context-commentstring, package-info.nvim,
  SchemaStore.nvim, neotest (+jest, +vitest), and nvim-autopairs.
- New `:checkhealth jsvim` reports tooling and attached clients.

LSP / editor polish:
- Inlay hints auto-on at LspAttach with `<leader>th` toggle.
- `vim.diagnostic.config` (rounded float, severity sort, virtual_text).
- Mason path migrated to mason-lspconfig v2 API.
- Import helpers use typed code-action kinds (source.organizeImports.ts).

Sweep deprecated APIs repo-wide: nvim_*_set_option, get_active_clients,
execute_command, diagnostic.goto_*, highlight.on_yank.

Misc: drop conflicting `vim.o.clipboard`; move Claude toggle off the
non-portable `<C-,>` to `<leader>ct`; make `ai` category opt-in per
package; add `.github/workflows/check.yml` running `nix flake check`
and building every language package.

Docs (README, installation, language-packages, adding-languages, CHANGELOG)
updated to reflect the new package name, plugin set, keymaps, and the
new mkLanguagePackage workflow for adding a language.

Made-with: Cursor
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant