Skip to content

[plugins] nvim-dap + lazydev.nvim + aerial.nvim — debugging, Lua LSP, code outline #290

Description

@stanfish06

What

Three plugins that fill genuine gaps in the current setup. These are distinct from the suggestions in #287 (flash.nvim, grug-far.nvim).


1. nvim-dap (mfussenegger/nvim-dap) — interactive debugging

Gap: The config runs 7 LSP servers (rust_analyzer, gopls, clangd, pyright, pyrefly, ts_ls, sourcekit) for language intelligence, but has zero debugging support. :Compile and makeprg exist for builds, but there is no way to set breakpoints, step through code, or inspect variables.

Fit: rust_analyzer, gopls, and clangd all ship DAP (Debug Adapter Protocol) adapters (codelldb for Rust/C, the built-in Go delve adapter, etc.). nvim-dap uses the same language processes already running — no new servers needed. Add nvim-dap-ui for a floating panel (variables, call stack, breakpoints) to match the existing float-heavy UI (filetree.lua, server.lua, noice.nvim).

Pairs naturally with the refactoring.nvim setup — extract/inline plus debug is a full editing workflow.


2. lazydev.nvim (folke/lazydev.nvim) — Neovim Lua API type annotations

Gap: lua-language-server (luals) is configured (plugin_config.lua:94–107) but without type stubs for the Neovim Lua API. This means vim.api.*, vim.lsp.*, vim.treesitter.*, vim.uv.*, and all Neovim globals are untyped — no completions, no hover docs, no jump-to-definition for Neovim built-ins.

Fit: lazydev.nvim injects the official Neovim Lua type annotations into luals at startup. Working on this very config (options.lua, plugin_config.lua, treesitter.lua, lib/async.lua) becomes dramatically faster: accurate vim.* completions, inline docs on hover, and type errors caught before reloading. Zero runtime overhead — it only affects the language server.


3. aerial.nvim (stevearc/aerial.nvim) — persistent code outline

Gap: <leader>ls opens fzf LSP document symbols (a one-shot jump popup). There is no persistent "where am I in this file" outline. With large files (e.g. plugin_config.lua at 517 lines), navigating by treesitter-textobject jumps (]f/[f) is useful but slow.

Fit: aerial.nvim adds a toggleable sidebar showing the symbol tree (functions, classes, types) backed by LSP + treesitter — the same sources already in place. The sidebar is consistent with the floating filetree style. It complements rather than replaces fzf: aerial is for orientation ("I'm 40% into this file, inside class Foo"), fzf is for jumping ("go to bar()").

Works immediately with the existing LSP setup and treesitter parsers; requires no new servers.


Where to add

lua/config/plugins.lua — add to package_list
lua/config/plugin_config.lua — setup calls and keymaps (suggest <leader>db for dap, <leader>o for aerial)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions