plugins: rewrite the LSP configuration

- Rewrites the LSP configuration to neovim v0.11+ capabilities in the
  mason.lua file.
- Adapts the completion configuration accordingly.
- Removes lsp-zero unnecessary plugin.
- Removes the nvim-lsp-file-operations plugin that I never use.
- Removes deprecated keybindings for diagnostics.
- Removes branch options when installing venv-selector.
- Updates options for JSON folding.
- Updates the README accordingly.
- I have been helped by the Kimi language model provided by the Kagi
  assistant interface.

Co-Authored-by: iGor milhit <igor@milhit.ch>
main
iGor milhit 2025-12-17 07:41:30 +01:00
parent be776d2896
commit 5a4aef50cd
Signed by: igor
GPG Key ID: 692D97C3D0228A99
9 changed files with 57 additions and 283 deletions

View File

@ -76,11 +76,9 @@ I don't provide links for each of these plugins as they are easy to be found.
- `cmp-emoji` for emoji completion after ':'.
- `lspkind.nvim` to add text symbols to spot the type of source completion.
- Language servers:
- `lsp-zero.nvim` to ease LSP configuration.
- `nvim-lspconfig` to configure LSP support and completion, with
dependencies:
- `cmp-nvim-lsp` to get LSP results in completion.
- `nvim-lsp-file-operations` to add some code actions.
- `fidget.nvim` for LSP progress message and neovim notifications.
- `mason.nvim` with `mason-lspconfig.nvim` to install automatically the
needed LSP. And also with `mason-tool-installer` to extend it's package

View File

@ -2,7 +2,7 @@
-- Use treesitter for folding
-- Disable the color column
vim.opt.foldmethod="expr"
vim.opt.foldexpr="nvim_treesitter#foldexpr()"
vim.wo[0][0].foldexpr = 'v:lua.vim.treesitter.foldexpr()'
vim.wo[0][0].foldmethod = 'expr'
vim.opt.foldlevel=3
vim.opt.colorcolumn=""

View File

@ -33,7 +33,7 @@ local highlight_group = vim.api.nvim_create_augroup(
)
vim.api.nvim_create_autocmd('TextYankPost', {
callback = function()
vim.highlight.on_yank()
vim.hl.on_yank()
end,
group = highlight_group,
pattern = '*',

View File

@ -1,10 +0,0 @@
-- Install lsp-zero, to ease LSP support configuration
-- https://lsp-zero.netlify.app
-- https://github.com/VonHeikemen/lsp-zero.nvim/
return {
"VonHeikemen/lsp-zero.nvim",
branch = "v4.x",
lazy = true,
config = false,
}

View File

@ -6,155 +6,21 @@ return {
dependencies = {
-- Send LSP results to autocompletion nvim-cmp
"hrsh7th/cmp-nvim-lsp",
-- Adds code actions, such as smart file renaming, etc
{ "antosha417/nvim-lsp-file-operations", config = true },
-- 💫 Extensible UI for Neovim notifications and LSP progress messages
{ 'j-hui/fidget.nvim', tag = "legacy", opts = {} },
{ 'j-hui/fidget.nvim', tag = "legacy", opts = {} },
},
config = function()
-- Import lsp-zero
local lsp_zero = require("lsp-zero")
-- Activate some functionalities when a LSP is activated to the current
-- file
local lsp_attach = function(_, bufnr)
local opts = { buffer = bufnr, silent = true }
-- Keymaps
opts.desc = "[LSP] Show LSP references"
vim.keymap.set(
"n",
"gR",
"<cmd>Telescope lsp_references<CR>",
opts
)
opts.desc = "[LSP] Go to declaration"
vim.keymap.set(
"n",
"gD",
vim.lsp.buf.declaration,
opts
)
opts.desc = "[LSP] Show LSP definitions"
vim.keymap.set(
"n",
"gd",
"<cmd>Telescope lsp_definitions<CR>",
opts
)
opts.desc = "[LSP] Show LSP implementations"
vim.keymap.set(
"n",
"gi",
"<cmd>Telescope lsp_implementations<CR>",
opts
)
opts.desc = "[LSP] Show LSP type definitions"
vim.keymap.set(
"n",
"gt",
"<cmd>Telescope lsp_type_definitions<CR>",
opts
)
opts.desc = "[LSP] Show LSP signature help"
vim.keymap.set(
"n",
"gs",
vim.lsp.buf.signature_help,
opts
)
opts.desc = "[LSP] See available code actions"
vim.keymap.set(
{ "n", "v" },
"<leader>ca",
vim.lsp.buf.code_action,
opts
)
opts.desc = "[LSP] Smart rename"
vim.keymap.set(
"n",
"<leader>rn",
vim.lsp.buf.rename,
opts
)
opts.desc = "[LSP] Show buffer diagnostics"
vim.keymap.set(
"n",
"<leader>D",
"<cmd>Telescope diagnostics bufnr=0<CR>",
opts
)
opts.desc = "[LSP] Show line diagnostics"
vim.keymap.set(
"n",
"<leader>d",
vim.diagnostic.open_float,
opts
)
opts.desc = "[LSP] Go to previous diagnostic"
vim.keymap.set("n", "[d", function()
vim.diagnostic.jump({ count = -1, float = true })
end, opts) -- jump to previous diagnostic in buffer
opts.desc = "[LSP] Go to next diagnostic"
vim.keymap.set("n", "]d", function()
vim.diagnostic.jump({ count = 1, float = true })
end, opts) -- jump to next diagnostic in buffer
opts.desc = "[LSP] Show documentation for what is under cursor"
vim.keymap.set(
"n",
"K",
vim.lsp.buf.hover,
opts
)
opts.desc = "[LSP] Format buffer"
vim.keymap.set(
{ "n", "x" },
"F",
"<cmd>lua vim.lsp.buf.format({async = true})<cr>",
opts
)
opts.desc = "[LSP] Restart LSP"
vim.keymap.set(
"n",
"<leader>rs",
":LspRestart<CR>",
opts
)
end
lsp_zero.extend_lspconfig({
-- Display diagnostic signs in the sign column
sign_text = true,
-- Attach the keymap function
lsp_attach = lsp_attach,
-- Extend the default completion capabilities by LSP suggestions
capabilities = require("cmp_nvim_lsp").default_capabilities(),
vim.diagnostic.config({
signs = {
text = {
[vim.diagnostic.severity.ERROR] = "",
[vim.diagnostic.severity.WARN] = "",
[vim.diagnostic.severity.HINT] = "󰠠 ",
[vim.diagnostic.severity.INFO] = "",
}
}
})
-- Use lsp_zero to configure interface
lsp_zero.ui({
float_border = "rounded",
sign_text = {
error = "",
warn = "",
hint = "󰠠 ",
info = "",
},
})
end,
}

View File

@ -1,139 +1,67 @@
-- Install and configure mason.nvim which will install automatically the needed
-- LSP
-- New LSP configuration (since neovim 0.11+)
return {
"williamboman/mason.nvim",
'mason-org/mason-lspconfig.nvim',
dependencies = {
"williamboman/mason-lspconfig.nvim",
"WhoIsSethDaniel/mason-tool-installer.nvim",
'mason-org/mason.nvim',
'neovim/nvim-lspconfig',
'WhoIsSethDaniel/mason-tool-installer.nvim',
},
config = function()
-- Import mason
local mason = require("mason")
-- Import mason-lspconfig
local mason_lspconfig = require("mason-lspconfig")
-- Import lspconfig
local lspconfig = require("lspconfig")
local util = require("lspconfig.util")
-- Import mason-tool-installer
local mason_tool_installer = require("mason-tool-installer")
-- Activate mason and set icones
mason.setup({
require("mason").setup({
ui = {
icons = {
package_installed = "",
package_pending = "",
package_uninstalled = "",
},
},
}
}
})
mason_tool_installer.setup({
require("mason-tool-installer").setup({
ensure_installed = {
"black",
"isort",
"prettier",
"ruff",
"stylua",
"tree-sitter-cli",
}
})
mason_lspconfig.setup({
-- LSP to be installed by default
-- Available LSP: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
-- LSP can be installed with :Mason
-- But installing LSP through the following list is better
require("mason-lspconfig").setup({
ensure_installed = {
"cssls",
"html",
"jsonls",
"lua_ls",
"marksman",
"pylsp",
"ty",
"ruff",
"yamlls",
},
handlers = {
-- Function called for each LSP from the ensure_installed list loaded
function(server_name)
-- Activate all LSP from the ensure_installed list with its default
-- configuration
lspconfig[server_name].setup({})
end,
-- Then, configure each LSP as needed
-- See https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
--
-- To deactivate a LSP:
-- lsp_name = require("lsp-zero").noop,
-- The LSP name before`= function()` has to be the same than after
-- `lspconfig.`
-- The first one is the mason_lspconfig key, the seconde one is the
-- lspconfig key. They are identical to the ensure_installed entries.
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#pylsp
pylsp = function()
lspconfig.pylsp.setup({
settings = {
pylsp = {
plugins = {
pyflakes = { enabled = false },
pycodestyle = {
enabled = true,
ignore = { "E501" },
},
},
},
},
})
end,
lua_ls = function()
lspconfig.lua_ls.setup({
settings = {
Lua = {
diagnostics = {
-- Force LSP to recognize global variable `vim`.
globals = { "vim" },
disable = { "missing-fields" },
}
}
}
})
end,
jsonls = function()
lspconfig.jsonls.setup({
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = { enable = true },
}
}
})
end,
marksman = function()
lspconfig.marksman.setup({
setting = {
filetypes = {
"markdown",
"quarto",
},
root_dir = util.root_pattern(
'.git',
'.marksman.toml',
'_quarto.yml'
),
}
})
end
},
})
end,
vim.lsp.config.marksman = {
filetypes = { "markdown", "quarto" },
root_dir = vim.fs.root(0, {
".git",
".marksman.toml",
"._quarto.yml"
})
}
vim.lsp.config.jsonls = {
settings = {
json = {
schemas = require('schemastore').json.schemas(),
validate = { enable = true },
}
}
}
vim.lsp.config('*', {
capabilities = require('cmp_nvim_lsp').default_capabilities(),
})
end
}

View File

@ -110,6 +110,8 @@ return {
},
},
{ name = "path" },
{ name = "ty" },
{ name = "ruff" },
{ name = "emoji" },
}),
@ -128,10 +130,14 @@ return {
nvim_lua = "[Lua]",
lazydev = "[Lazydev]",
path = "[Path]",
ty = "[Ty]",
ruff = "[Ruff]",
emoji = "[Emoji]",
},
}),
},
})
end,

View File

@ -1,19 +1,5 @@
-- Diagnostic keymaps
vim.keymap.set(
'n',
'[d',
vim.diagnostic.goto_prev,
{ desc = "[Diagnostic] Go to previous diagnostic message" }
)
vim.keymap.set(
'n',
']d',
vim.diagnostic.goto_next,
{ desc = "[Diagnostic] Go to next diagnostic message" }
)
vim.keymap.set(
'n',
'<leader>e',

View File

@ -3,7 +3,7 @@
return {
'linux-cultist/venv-selector.nvim',
branch = 'regexp',
-- branch = 'regexp',
dependencies = {
'neovim/nvim-lspconfig',
'nvim-telescope/telescope.nvim',