aboutsummaryrefslogtreecommitdiff
path: root/config/nvim/lua
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-10-01 23:00:40 +0200
committerRuben Beltran del Rio <git@r.bdr.sh>2025-10-01 23:00:40 +0200
commit8941a9d99c520b9495b1b42452fb43d6e085946f (patch)
tree595b8f92866d361020d4c8e03e3ea76864370942 /config/nvim/lua
parent0b630e5e87b8461191683619c03309d24c8acccb (diff)
Update nvim config
Diffstat (limited to 'config/nvim/lua')
-rw-r--r--config/nvim/lua/lsp.lua112
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)