diff options
| author | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-10-01 23:00:40 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <git@r.bdr.sh> | 2025-10-01 23:00:40 +0200 |
| commit | 8941a9d99c520b9495b1b42452fb43d6e085946f (patch) | |
| tree | 595b8f92866d361020d4c8e03e3ea76864370942 /config/nvim/lua | |
| parent | 0b630e5e87b8461191683619c03309d24c8acccb (diff) | |
Update nvim config
Diffstat (limited to 'config/nvim/lua')
| -rw-r--r-- | config/nvim/lua/lsp.lua | 112 |
1 files changed, 94 insertions, 18 deletions
diff --git a/config/nvim/lua/lsp.lua b/config/nvim/lua/lsp.lua index 7dfb050..7434504 100644 --- a/config/nvim/lua/lsp.lua +++ b/config/nvim/lua/lsp.lua @@ -1,15 +1,45 @@ -local lspconfig = require('lspconfig') local coq = require('coq') + +-- Prepare capabilities with COQ support local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.completion.completionItem.snippetSupport = true +capabilities = coq.lsp_ensure_capabilities(capabilities) + +-- Configure each LSP server +vim.lsp.config('ts_ls', { + cmd = { 'typescript-language-server', '--stdio' }, + root_markers = { 'package.json', 'tsconfig.json', 'jsconfig.json' }, + capabilities = capabilities, +}) + +vim.lsp.config('eslint', { + cmd = { 'vscode-eslint-language-server', '--stdio' }, + root_markers = { '.eslintrc', '.eslintrc.js', '.eslintrc.json', 'package.json' }, + capabilities = capabilities, +}) + +vim.lsp.config('svelte', { + cmd = { 'svelteserver', '--stdio' }, + root_markers = { 'package.json', 'svelte.config.js' }, + capabilities = capabilities, +}) + +vim.lsp.config('pyright', { + cmd = { 'pyright-langserver', '--stdio' }, + root_markers = { 'pyproject.toml', 'setup.py', 'requirements.txt' }, + capabilities = capabilities, +}) -lspconfig.ts_ls.setup(coq.lsp_ensure_capabilities({})) -lspconfig.eslint.setup(coq.lsp_ensure_capabilities({})) -lspconfig.svelte.setup(coq.lsp_ensure_capabilities({})) -lspconfig.pyright.setup(coq.lsp_ensure_capabilities({})) -lspconfig.dartls.setup(coq.lsp_ensure_capabilities({})) -lspconfig.rust_analyzer.setup(coq.lsp_ensure_capabilities({ - -- Server-specific settings. See `:help lspconfig-setup` +vim.lsp.config('dartls', { + cmd = { 'dart', 'language-server', '--protocol=lsp' }, + root_markers = { 'pubspec.yaml' }, + capabilities = capabilities, +}) + +vim.lsp.config('rust_analyzer', { + cmd = { 'rust-analyzer' }, + root_markers = { 'Cargo.toml', 'rust-project.json' }, + capabilities = capabilities, settings = { ['rust-analyzer'] = { imports = { @@ -31,14 +61,61 @@ lspconfig.rust_analyzer.setup(coq.lsp_ensure_capabilities({ } }, }, - on_attach = function(client, bufnr) - vim.lsp.inlay_hint.enable(true, { bufnr = bufnr }) - end -})) -lspconfig.lua_ls.setup(coq.lsp_ensure_capabilities({})) +}) + +vim.lsp.config('lua_ls', { + cmd = { 'lua-language-server' }, + root_markers = { '.luarc.json', '.luarc.jsonc', '.luacheckrc', 'stylua.toml', 'selene.toml' }, + capabilities = capabilities, +}) + +-- Auto-enable LSP servers based on filetype +vim.api.nvim_create_autocmd('FileType', { + pattern = { 'javascript', 'javascriptreact', 'typescript', 'typescriptreact' }, + callback = function() + vim.lsp.enable('ts_ls') + vim.lsp.enable('eslint') + end, +}) --- Global mappings. --- See `:help vim.diagnostic.*` for documentation on any of the below functions +vim.api.nvim_create_autocmd('FileType', { + pattern = 'svelte', + callback = function() + vim.lsp.enable('svelte') + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + pattern = 'python', + callback = function() + vim.lsp.enable('pyright') + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + pattern = 'dart', + callback = function() + vim.lsp.enable('dartls') + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + pattern = 'rust', + callback = function() + vim.lsp.enable('rust_analyzer') + -- Enable inlay hints for Rust + vim.lsp.inlay_hint.enable(true, { bufnr = 0 }) + end, +}) + +vim.api.nvim_create_autocmd('FileType', { + pattern = 'lua', + callback = function() + vim.lsp.enable('lua_ls') + end, +}) + +-- Global mappings vim.keymap.set('n', '<space>e', vim.diagnostic.open_float) vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) vim.keymap.set('n', ']d', vim.diagnostic.goto_next) @@ -51,9 +128,8 @@ vim.api.nvim_create_autocmd('LspAttach', { callback = function(ev) -- Enable completion triggered by <c-x><c-o> vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc' - - -- Buffer local mappings. - -- See `:help vim.lsp.*` for documentation on any of the below functions + + -- Buffer local mappings local opts = { buffer = ev.buf } vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts) vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts) |