add lsp_lines
This commit is contained in:
parent
a942b8c562
commit
98c59fc1d2
|
|
@ -0,0 +1,80 @@
|
||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Kickstart-based Neovim config using lazy.nvim as the plugin manager. Single `init.lua` + modular custom plugins under `lua/custom/plugins/`.
|
||||||
|
|
||||||
|
## Plugin Manager
|
||||||
|
|
||||||
|
lazy.nvim — plugins defined as lazy specs (`return { "owner/repo", ... }`).
|
||||||
|
|
||||||
|
Update plugins: `:Lazy update`
|
||||||
|
Check status: `:Lazy`
|
||||||
|
Install/manage LSP tools: `:Mason`
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
init.lua — Sections 1–9: foundation → plugins
|
||||||
|
lua/custom/plugins/init.lua — Auto-loads all *.lua files in same dir
|
||||||
|
lua/custom/plugins/*.lua — User-added plugins (no merge conflicts from upstream)
|
||||||
|
lua/kickstart/plugins/*.lua — Optional kickstart examples (indent_line, lint, gitsigns)
|
||||||
|
lazy-lock.json — Lockfile (commit this)
|
||||||
|
```
|
||||||
|
|
||||||
|
`init.lua` is organized into `do...end` blocks by section:
|
||||||
|
1. Foundation (options, keymaps, autocmds)
|
||||||
|
2. lazy.nvim bootstrap + setup
|
||||||
|
3. UI/UX (gitsigns, which-key, mini.nvim, todo-comments)
|
||||||
|
4. Search/Navigation (Telescope)
|
||||||
|
5. LSP (mason, nvim-lspconfig, fidget)
|
||||||
|
6. Formatting (conform.nvim)
|
||||||
|
7. Autocomplete & Snippets (blink.cmp + LuaSnip)
|
||||||
|
8. Treesitter
|
||||||
|
9. Optional examples
|
||||||
|
|
||||||
|
## Custom Plugins
|
||||||
|
|
||||||
|
| File | Purpose |
|
||||||
|
|------|---------|
|
||||||
|
| `claude.lua` | claudecode.nvim — `<leader>a*` keymaps; depends on snacks.nvim |
|
||||||
|
| `lsp.lua` | dbt language server config for SQL/YAML files |
|
||||||
|
| `markdown.lua` | live-preview.nvim |
|
||||||
|
| `notebook.lua` | molten-nvim (Jupyter), image.nvim (magick_cli), wezterm.nvim |
|
||||||
|
| `oil.lua` | oil.nvim file manager via mini.icons |
|
||||||
|
| `themes.lua` | gruvbox-medium (active), tokyonight (installed) |
|
||||||
|
| `toggle-term.lua` | toggleterm.nvim terminal toggle |
|
||||||
|
|
||||||
|
## LSP
|
||||||
|
|
||||||
|
Servers are configured in `init.lua:670` via `vim.lsp.config(name, server)` + `vim.lsp.enable(name)`.
|
||||||
|
Custom dbt server lives in `lua/custom/plugins/lsp.lua` — requires `dbt-language-server` in `$PATH`.
|
||||||
|
Lua formatting disabled in `lua_ls`; formatting delegated to `stylua` via conform.nvim.
|
||||||
|
|
||||||
|
## Key Bindings (leader = `<space>`)
|
||||||
|
|
||||||
|
- `<leader>s*` — Telescope search
|
||||||
|
- `<leader>f` — format buffer (conform)
|
||||||
|
- `<leader>a*` — Claude Code integration
|
||||||
|
- `<leader>h*` — gitsigns hunk operations
|
||||||
|
- `<leader>t*` — toggles (inlay hints, blame, word diff)
|
||||||
|
- `gr*` — LSP actions (rename, code action, references, definitions)
|
||||||
|
|
||||||
|
## Adding Plugins
|
||||||
|
|
||||||
|
Drop a `.lua` file in `lua/custom/plugins/` — auto-required on next start. Use the lazy spec pattern:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
return {
|
||||||
|
"owner/repo",
|
||||||
|
opts = {},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Formatting & Linting
|
||||||
|
|
||||||
|
- **Formatter**: conform.nvim — `<leader>f` to format; auto-format on save disabled by default (opt-in per filetype in `init.lua:760`)
|
||||||
|
- **Linter**: nvim-lint — runs on `BufEnter`/`BufWritePost`/`InsertLeave`; markdownlint for markdown
|
||||||
|
- **Treesitter**: auto-installs parsers on `FileType` event
|
||||||
38
init.lua
38
init.lua
|
|
@ -506,27 +506,39 @@ require('lazy').setup({
|
||||||
{
|
{
|
||||||
'stevearc/conform.nvim',
|
'stevearc/conform.nvim',
|
||||||
config = function()
|
config = function()
|
||||||
|
local prettier_ft = {
|
||||||
|
'javascript',
|
||||||
|
'javascriptreact',
|
||||||
|
'typescript',
|
||||||
|
'typescriptreact',
|
||||||
|
'vue',
|
||||||
|
'css',
|
||||||
|
'scss',
|
||||||
|
'less',
|
||||||
|
'html',
|
||||||
|
'json',
|
||||||
|
'jsonc',
|
||||||
|
'yaml',
|
||||||
|
'markdown',
|
||||||
|
'graphql',
|
||||||
|
}
|
||||||
|
local formatters_by_ft = {}
|
||||||
|
for _, ft in ipairs(prettier_ft) do
|
||||||
|
formatters_by_ft[ft] = { 'prettierd', 'prettier', stop_after_first = true }
|
||||||
|
end
|
||||||
|
|
||||||
require('conform').setup {
|
require('conform').setup {
|
||||||
notify_on_error = false,
|
notify_on_error = false,
|
||||||
format_on_save = function(bufnr)
|
format_on_save = function(bufnr)
|
||||||
local enabled_filetypes = {
|
if formatters_by_ft[vim.bo[bufnr].filetype] then
|
||||||
-- lua = true,
|
return { timeout_ms = 500, lsp_format = 'fallback' }
|
||||||
-- python = true,
|
|
||||||
}
|
|
||||||
if enabled_filetypes[vim.bo[bufnr].filetype] then
|
|
||||||
return { timeout_ms = 500 }
|
|
||||||
else
|
|
||||||
return nil
|
|
||||||
end
|
end
|
||||||
|
return nil
|
||||||
end,
|
end,
|
||||||
default_format_opts = {
|
default_format_opts = {
|
||||||
lsp_format = 'fallback',
|
lsp_format = 'fallback',
|
||||||
},
|
},
|
||||||
formatters_by_ft = {
|
formatters_by_ft = formatters_by_ft,
|
||||||
-- rust = { 'rustfmt' },
|
|
||||||
-- python = { "isort", "black" },
|
|
||||||
-- javascript = { "prettierd", "prettier", stop_after_first = true },
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
vim.keymap.set({ 'n', 'v' }, '<leader>f', function() require('conform').format { async = true } end, { desc = '[F]ormat buffer' })
|
vim.keymap.set({ 'n', 'v' }, '<leader>f', function() require('conform').format { async = true } end, { desc = '[F]ormat buffer' })
|
||||||
end,
|
end,
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
|
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||||
"live-preview.nvim": { "branch": "main", "commit": "c1fcf75c5f9c9c01dd392852de44204b60f1b5b1" },
|
"live-preview.nvim": { "branch": "main", "commit": "c1fcf75c5f9c9c01dd392852de44204b60f1b5b1" },
|
||||||
|
"lsp_lines.nvim": { "branch": "main", "commit": "3b57922d2d79762e6baedaf9d66d8ba71f822816" },
|
||||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e" },
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e" },
|
||||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
|
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
|
||||||
"mason.nvim": { "branch": "main", "commit": "bb639d4bf385a4d89f478b83af4d770be05ab7eb" },
|
"mason.nvim": { "branch": "main", "commit": "bb639d4bf385a4d89f478b83af4d770be05ab7eb" },
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
return {
|
||||||
|
"ErichDonGubler/lsp_lines.nvim",
|
||||||
|
config = function()
|
||||||
|
require("lsp_lines").setup()
|
||||||
|
|
||||||
|
-- Disable default virtual text to prevent overlapping/duplicate diagnostic lines
|
||||||
|
vim.diagnostic.config({
|
||||||
|
virtual_text = false,
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
-- Keymap to toggle lsp_lines
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>ll",
|
||||||
|
function()
|
||||||
|
require("lsp_lines").toggle()
|
||||||
|
end,
|
||||||
|
desc = "Toggle lsp_lines",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue