From 8941a9d99c520b9495b1b42452fb43d6e085946f Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Wed, 1 Oct 2025 23:00:40 +0200 Subject: Update nvim config --- config/nvim/lua/lsp.lua | 114 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 95 insertions(+), 19 deletions(-) (limited to 'config/nvim/lua') 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({})) - --- Global mappings. --- See `:help vim.diagnostic.*` for documentation on any of the below functions +}) + +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, +}) + +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', '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 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) -- cgit