feat: IDE-grade distro overhaul (LSP/DAP/AI/docs/tests + treesitter migration)#1
Closed
yashksaini-coder wants to merge 47 commits into
Closed
feat: IDE-grade distro overhaul (LSP/DAP/AI/docs/tests + treesitter migration)#1yashksaini-coder wants to merge 47 commits into
yashksaini-coder wants to merge 47 commits into
Conversation
8-phase plan covering LSP/DAP IDE features for C/C++/Rust/Go/Python/JS, per-language enrichment, AI assistants (Claude/Copilot/OpenCode), productivity plugins, time/pomodoro utilities, deployed VitePress docs site, and plenary test harness with CI. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…toggle keymaps Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Removes manual column alignment in mason ensure_installed comments and collapses Go DAP config tables to stylua's canonical form. No behavior change — formatter-only fixes for the Phase 1 additions. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cmp.lua, snacks.lua, terminal.lua had small stylua violations predating this branch. Cleared so Phase 7 CI (lint + test) passes cleanly when added. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
opencode.nvim's `ask(default, opts)` accepts only `submit` and `context` keys; `range = true` was silently ignored. The plugin auto-detects the visual selection from mode "v", so passing it explicitly is unnecessary. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Create lua/plugins/time/pomo.lua with epwalsh/pomo.nvim, pomodoro session schedule, and <leader>p keys for start/stop/hide/show - Add pomo timer and HH:MM clock components to lualine_x in lualine.lua - Register <leader>p group "pomo (timer/clock)" in which-key.lua Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Creates lua/plugins/time/stand.lua with samharju/stand.nvim configured for a 50-minute break interval with startup_notification disabled. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add { import = "plugins.time" } to the lazy.nvim spec in
lua/config/lazy.lua so that pomo.nvim and stand.nvim are loaded
alongside the other plugin sub-trees.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Convert all Lua files from tab indentation to 2-space indentation to match stylua --indent-type=Spaces --indent-width=2 --column-width=100, ensuring `stylua --check lua/` exits 0 in CI. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Makefile auto-generates stylua.toml on demand, but bare `stylua --check` without the file uses default tab indentation, contradicting the project's declared 2-space style. Committing the config eliminates that drift and makes local and CI agree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Single source of truth for formatting rules. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Disable stand.nvim (samharju/stand.nvim does not exist on GitHub); lazy.nvim was looping on failed clones and crashing headless startup. Marked enabled=false with a note until a working RSI plugin is found. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The samharju/stand.nvim slug referenced in the original plan is a phantom; git ls-remote confirms the repo is missing. Removing the dead spec rather than carrying enabled=false TODO code. README's Time-discipline bullet revised to describe only the working pomo.nvim + lualine integration. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
refactoring.nvim 1.x (the version aligned with Neovim 0.12) requires
`require("async")` at lua/refactoring.lua:45. The plugin's README
documents this dep but our spec didn't list it, so first load of the
refactor module would fail with `module 'async' not found`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…0.12 The legacy `master` branch crashes with `attempt to call method 'range' (a nil value)` because its query predicates use the deprecated match-by-name API while Neovim 0.12 only supports match-by-integer-ID. Symptoms surfaced via render-markdown.nvim and snacks.image both calling into vim.treesitter.parse() and tripping over the broken predicates. Migrating to `main` (the nvim-treesitter rewrite) aligns with current core treesitter. Trade-offs: - No bundled `incremental_selection` (the prior <CR>/<S-CR>/<BS> bindings) - No bundled `indent` module - Requires `tree-sitter` CLI on $PATH for parser installation (`sudo pacman -S tree-sitter` or `npm i -g tree-sitter-cli`) Install is gated on CLI presence so first boot is quiet rather than spamming ENOENT for every parser. A one-line :notify warns when the CLI is missing so the install step is discoverable. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Captures the post-fix state: - async.nvim added (refactoring.nvim runtime dep) - FixCursorHold.nvim added (neotest dep) - nvim-treesitter pinned to current main branch tip - fff.nvim, gitsigns.nvim drift from upstream master Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
|
There was a problem hiding this comment.
Pull request overview
This PR significantly expands the Neovim configuration into a more “distribution-like” setup with IDE features (LSP/DAP), per-language tooling, AI assistants, a docs site (VitePress + Pages workflow), and basic CI/test harness.
Changes:
- Adds/updates plugin specs for LSP, DAP, Treesitter (migrated to
nvim-treesittermain), testing (neotest + plenary), AI integrations, and editor productivity tools. - Introduces a VitePress docs site with a GitHub Pages deploy workflow and in-editor keymaps to open docs.
- Adds minimal headless test harness (
make test) and CI workflows for linting/tests.
Reviewed changes
Copilot reviewed 63 out of 109 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/utils/docs_spec.lua | Adds a small plenary test for the docs helper module. |
| tests/minimal_init.lua | Minimal init to run plenary tests headlessly. |
| stylua.toml | Adds StyLua formatting configuration. |
| README.md | Adds “Highlights” section describing the new distro features. |
| Makefile | Adds make test target for plenary tests. |
| lua/utils/snippets.lua | Formatting/cleanup of snippet insertion helpers and keymaps. |
| lua/utils/docs.lua | Adds a helper to open the hosted docs URL. |
| lua/utils/boiler_plates.lua | Formatting/cleanup of boilerplate loader keymaps. |
| lua/plugins/which-key.lua | Expands which-key groups/labels for new keymaps and features. |
| lua/plugins/trouble.lua | Formatting-only change. |
| lua/plugins/treesitter.lua | Migrates treesitter config to main branch + CLI-gated installs + vim.treesitter.start. |
| lua/plugins/tip.lua | Formatting-only change. |
| lua/plugins/time/pomo.lua | Adds pomo.nvim timer plugin config + keymaps. |
| lua/plugins/themes/themery.lua | Formatting-only change for Themery + default theme autocmd. |
| lua/plugins/themes/rose-pine.lua | Formatting-only change. |
| lua/plugins/themes/osmium.lua | Formatting-only change. |
| lua/plugins/themes/kanagawa.lua | Formatting-only change. |
| lua/plugins/themes/gruvbox.lua | Formatting-only change. |
| lua/plugins/themes/chai.lua | Formatting-only change. |
| lua/plugins/themes/catppuccin.lua | Formatting-only change. |
| lua/plugins/terminal.lua | Formatting-only change to toggleterm config and terminal definitions. |
| lua/plugins/telescope.lua | Formatting-only change; includes snacks image preview + buffer validity workaround. |
| lua/plugins/snacks.lua | Formatting-only change; keeps image + indent configuration. |
| lua/plugins/smear-cursor.lua | Formatting-only change. |
| lua/plugins/render-markdown.lua | Formatting-only change. |
| lua/plugins/project.lua | Formatting-only change. |
| lua/plugins/nvim-tree.lua | Formatting-only change. |
| lua/plugins/numb.lua | Formatting-only change. |
| lua/plugins/notify.lua | Formatting-only change. |
| lua/plugins/noice.lua | Formatting-only change (keeps view/layout/LSP overrides). |
| lua/plugins/neotest.lua | Adds neotest + adapters and keymaps. |
| lua/plugins/mini/mini-map.lua | Formatting-only change. |
| lua/plugins/mini/mini-icons.lua | Formatting-only change. |
| lua/plugins/mini/mini-cursorword.lua | Formatting-only change. |
| lua/plugins/mason.lua | Expands Mason tool installation list for multi-language IDE tooling. |
| lua/plugins/lualine.lua | Adds pomo timer + clock segment to lualine. |
| lua/plugins/lspkind.lua | Formatting-only change. |
| lua/plugins/lsp.lua | Enables/configures additional LSP servers (pyright/gopls/clangd). |
| lua/plugins/leetcode.lua | Formatting-only change. |
| lua/plugins/lang/rustaceanvim.lua | Adds rustaceanvim configuration for Rust tooling. |
| lua/plugins/lang/lazydev.lua | Adds lazydev for improved Lua/Neovim API completion/types. |
| lua/plugins/lang/go.lua | Adds go.nvim with formatting/imports-on-save autocmd. |
| lua/plugins/lang/friendly-snippets.lua | Adds friendly-snippets and loads local snippet paths. |
| lua/plugins/lang/clangd-extensions.lua | Adds clangd_extensions with C/C++ helper commands/keymaps. |
| lua/plugins/git.lua | Formatting-only change. |
| lua/plugins/fff.lua | Formatting-only change. |
| lua/plugins/ferris.lua | Formatting-only change. |
| lua/plugins/editor/zen-mode.lua | Adds zen-mode config + toggle keymap. |
| lua/plugins/editor/undotree.lua | Adds undotree config + toggle keymap. |
| lua/plugins/editor/twilight.lua | Adds twilight config + toggle keymap. |
| lua/plugins/editor/todo-comments.lua | Adds todo-comments with Trouble/Telescope integration keymaps. |
| lua/plugins/editor/refactoring.lua | Adds refactoring.nvim with async.nvim dep + keymaps. |
| lua/plugins/editor/oil.lua | Adds oil.nvim config and - keymap. |
| lua/plugins/editor/neogit.lua | Adds neogit config + keymap. |
| lua/plugins/editor/mini-bufremove.lua | Adds mini.bufremove with safer buffer-delete keymaps. |
| lua/plugins/editor/harpoon.lua | Adds harpoon2 with keymaps (currently defined via keys = function()). |
| lua/plugins/editor/flash.lua | Adds flash.nvim motion keymaps. |
| lua/plugins/editor/diffview.lua | Adds diffview config + keymaps. |
| lua/plugins/dap.lua | Expands DAP setup to Python/Go/JS + signs + UI configuration. |
| lua/plugins/crates.lua | Formatting-only change. |
| lua/plugins/conform.lua | Formatting-only change; keeps formatter mappings and per-ft config. |
| lua/plugins/compiler.lua | Formatting-only change. |
| lua/plugins/cmp.lua | Adds lazydev completion source + formatting cleanup. |
| lua/plugins/cellular-automation.lua | Formatting-only change. |
| lua/plugins/bufferline.lua | Formatting-only change. |
| lua/plugins/barbecue.lua | Formatting-only change. |
| lua/plugins/autotag.lua | Formatting-only change. |
| lua/plugins/autopairs.lua | Formatting-only change. |
| lua/plugins/alpha.lua | Formatting-only change in dashboard config. |
| lua/plugins/ai/opencode.lua | Adds OpenCode integration + keymaps. |
| lua/plugins/ai/copilot.lua | Adds copilot.lua + CopilotChat with <leader>i namespace keymaps. |
| lua/plugins/ai/claude-code.lua | Adds claude-code.nvim integration + keymaps. |
| lua/plugins/aerial.lua | Formatting-only change. |
| lua/lsps/ts_ls.lua | Formatting-only change. |
| lua/lsps/ruby_lsp.lua | Formatting-only change. |
| lua/lsps/pyright.lua | Adds pyright settings. |
| lua/lsps/lua_ls.lua | Formatting-only change. |
| lua/lsps/gopls.lua | Adds gopls settings. |
| lua/lsps/csharp.lua | Formatting-only change. |
| lua/lsps/clangd.lua | Adds clangd command/init options. |
| lua/config/options.lua | Formatting-only change. |
| lua/config/nvim-diagnostics.lua | Formatting-only change. |
| lua/config/lazy.lua | Expands lazy imports (lang/ai/editor/time) and formatting cleanup. |
| lua/config/keymaps/trouble.lua | Formatting-only change. |
| lua/config/keymaps/terminal.lua | Formatting-only change. |
| lua/config/keymaps/mini-tabline.lua | Formatting-only change. |
| lua/config/keymaps/lsp.lua | Major expansion of LSP-related keymaps (symbols, calls, inlay toggle, etc.). |
| lua/config/keymaps/init.lua | Adds docs keymaps module require. |
| lua/config/keymaps/git.lua | Formatting-only change. |
| lua/config/keymaps/general.lua | Formatting-only change. |
| lua/config/keymaps/fff.lua | Formatting-only change. |
| lua/config/keymaps/docs.lua | Adds keymaps for opening online docs pages. |
| lua/config/keymaps/dap.lua | Expands DAP keymaps (hover/scopes/frames/eval). |
| lua/config/keymaps/crates.lua | Formatting-only change. |
| lua/config/keymaps/compiler.lua | Formatting-only change. |
| lazy-lock.json | Updates plugin pins to match new/changed plugin set. |
| docs-site/plugins.md | Adds plugin reference page (currently includes an outdated stand.nvim entry). |
| docs-site/package.json | Adds VitePress docs site package definition. |
| docs-site/languages.md | Adds language support matrix. |
| docs-site/keymaps.md | Adds keymap reference documentation. |
| docs-site/index.md | Adds VitePress home page content. |
| docs-site/getting-started.md | Adds installation/getting-started guide. |
| docs-site/ai.md | Adds AI assistants documentation. |
| docs-site/.vitepress/config.mjs | Adds VitePress site configuration (base, nav, sidebar, edit links). |
| .gitignore | Ignores docs-site build/cache artifacts and node_modules. |
| .github/workflows/docs-deploy.yml | Adds Pages deployment workflow for docs-site on dev pushes. |
| .github/workflows/ci.yml | Adds CI lint (stylua/luacheck) and headless test job. |
Files not reviewed (1)
- docs-site/package-lock.json: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+8
to
+11
| if vim.fn.has("mac") == 1 then | ||
| opener = "open" | ||
| elseif vim.fn.has("unix") == 1 then | ||
| opener = "xdg-open" |
Comment on lines
+12
to
+19
| elseif vim.fn.has("win32") == 1 then | ||
| opener = "start" | ||
| else | ||
| vim.notify("Unsupported platform for opening URLs", vim.log.levels.WARN) | ||
| return | ||
| end | ||
| vim.fn.jobstart({ opener, url }, { detach = true }) | ||
| vim.notify("Opened " .. url, vim.log.levels.INFO) |
Comment on lines
+41
to
+43
| { "<leader>q", desc = "Quit all" }, | ||
| { "<leader>r", group = "rust (ferris)" }, | ||
| { "<leader>s", group = "search/snippets" }, |
Comment on lines
+5
to
+8
| keys = function() | ||
| local harpoon = require("harpoon") | ||
| harpoon:setup({}) | ||
| local keys = { |
Comment on lines
+233
to
+239
| -- Python (debugpy) | ||
| local mason_path = vim.fn.stdpath("data") .. "/mason/packages" | ||
| dap.adapters.python = { | ||
| type = "executable", | ||
| command = mason_path .. "/debugpy/venv/bin/python", | ||
| args = { "-m", "debugpy.adapter" }, | ||
| } |
Comment on lines
+6
to
+10
| local plenary = vim.fn.stdpath("data") .. "/lazy/plenary.nvim" | ||
| if vim.fn.isdirectory(plenary) == 0 then | ||
| vim.fn.system({ | ||
| "git", "clone", "--depth=1", | ||
| "https://github.com/nvim-lua/plenary.nvim", |
Comment on lines
+1
to
+4
| # Plugins | ||
|
|
||
| This page is generated from `lazy-lock.json`. See `:Lazy` in Neovim for live state. | ||
|
|
| ## Time | ||
|
|
||
| - **pomo.nvim** — pomodoro timer in lualine | ||
| - **stand.nvim** — 50-min RSI reminder |
Comment on lines
+15
to
+16
| -- Requires the `tree-sitter` CLI on $PATH (`sudo pacman -S tree-sitter-cli` | ||
| -- or `npm i -g tree-sitter-cli`). |
…tter On Arch, `tree-sitter` is the C library only; the binary required by nvim-treesitter `main` lives in the separate `tree-sitter-cli` package (extra repo). Updated the runtime warning and file-header docs so users don't lose time chasing the wrong package. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Owner
Author
|
Closing per request — taking the work in a different direction. Branch deleted. Local archive tag preserved at |
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.
Summary
Eight-phase overhaul that turns this personal config into an IDE-grade Neovim distribution for systems languages, plus runtime fixes for errors uncovered during smoke testing.
Phase-by-phase delivery
<leader>i(collision-free namespace).samharju/stand.nvimretracted: phantom slug.)devpush,<leader>Dkeymap to open it from inside Neovim.make testtarget, neotest with python/go/rust/jest/plenary adapters, CI lint + test workflow on PR/push.Post-sprint runtime fixes
c25e9e3 fix(refactoring): add lewis6991/async.nvim runtime dependency— refactoring.nvim 1.x requiresrequire("async").8a3c436 fix(treesitter): migrate to nvim-treesitter main branch for Neovim 0.12—masterbranch query predicates use deprecated match-by-name API;mainis the rewrite.29d4e3c chore: update lazy-lock— captures new plugin pins.03ef783 docs(treesitter): correct package name — tree-sitter-cli, not tree-sitter— Arch package nuance.Manual steps required after merge
GitHub Actionsso docs deploy.luarocksfor Mason'sluacheckinstalldotnet-sdkfor Mason'scsharpierinstalltree-sitter-cli(NOTtree-sitter— that's only the C library) for nvim-treesittermainparser compilation. Alternatives:cargo install tree-sitter-cliornpm i -g tree-sitter-cli.:Lazy syncthen:MasonToolsInstallthen:TSInstall all(or specific parsers).:Copilot auth(device flow).claudebinary already on$PATH. OpenCode server requiresopencodelistening on port 4096.Verification
stylua --check lua/exits 0make test3/3 plenary tests passingnvim --headlessclean startup (one informational notify iftree-sitter-cliis missing)cd docs-site && npm install && npx vitepress buildTest plan
make test— 3 plenary tests passmake all(lint + fmt-check) clean<leader>?enumerates new groups (i,j,n,p,D,G,R,u)<leader>dclaunches debugpy<leader>Gtruns tests<leader>Dopens https://yashksaini-coder.github.io/nvim/<leader>Reon a visual selection extracts a function (refactoring.nvim)range nilKnown follow-ups (not blockers)
<leader>cfcollision (crates "show features" vs LSP format) — left for user to decide<M-l>/<M-w>Copilot accept may collide with tmux Alt-prefix —set -g xterm-keys onresolvesincremental_selection(<CR>/<S-CR>/<BS>to expand TS nodes) lost in treesitter migration — installtreewalker.nvimif neededindentmodule for treesitter is gone too; built-in indent often suffices🤖 Generated with Claude Code