neovim: migrate to new lsp config

This commit is contained in:
2025-05-11 23:31:33 +03:00
parent 51bd75213c
commit 644d1f9521
6 changed files with 314 additions and 143 deletions

View File

@@ -0,0 +1,77 @@
local ts = require("telescope.builtin")
local null_ls = require("null-ls")
local formatting = require("daniil.formatting")
local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities())
capabilities.textDocument.completion.completionItem.snippetSupport = true
vim.lsp.config("*", {
capabilities = capabilities,
})
local null_formatting = null_ls.builtins.formatting
null_ls.setup({
sources = {
null_formatting.prettierd.with({
extra_filetypes = { "svelte" },
}),
null_formatting.stylua,
null_formatting.gofmt,
null_formatting.goimports,
null_formatting.shfmt,
},
on_attach = function()
local group = vim.api.nvim_create_augroup("NullLsLspFormatting", { clear = true })
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*",
group = group,
callback = function()
if not formatting.is_enabled() then
return
end
vim.lsp.buf.format()
end,
})
end,
})
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(ev)
local client = vim.lsp.get_client_by_id(ev.data.client_id)
if not client then
return
end
local opts = { silent = true }
vim.keymap.set("n", "gd", ts.lsp_definitions, opts)
vim.keymap.set("n", "gr", ts.lsp_references, opts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
vim.keymap.set("n", "<F2>", vim.lsp.buf.rename, opts)
vim.keymap.set("n", "<leader>r", vim.lsp.buf.rename, opts)
vim.keymap.set("n", "<leader>.", vim.lsp.buf.code_action, opts)
vim.keymap.set("i", "<C-e>", vim.lsp.buf.signature_help, opts)
if not vim.lsp.buf.range_code_action == nil then
vim.keymap.set("v", "<leader>.", vim.lsp.buf.range_code_action, opts)
end
end,
})
vim.diagnostic.config({
update_in_insert = false,
virtual_lines = {
severity = { vim.diagnostic.severity.ERROR },
},
})
vim.keymap.set("n", "<leader>ee", function()
vim.diagnostic.open_float(nil, { focus = false, scope = "line" })
end)
vim.keymap.set("n", "<leader>en", function()
vim.diagnostic.goto_next({ float = false })
end)
vim.keymap.set("n", "<leader>eN", function()
vim.diagnostic.goto_prev({ float = false })
end)

View File

@@ -0,0 +1,31 @@
local filetypes = { "go", "gotempl", "gowork", "gomod" }
local root_markers = { ".git", "go.mod", "go.work", vim.uv.cwd() }
vim.lsp.config.gopls = {
cmd = { "gopls" },
filetypes = filetypes,
root_markers = root_markers,
settings = {
gopls = {
linksInHover = true,
usePlaceholders = false, -- just to ensure it's off, incase in the future go team decides to toggle it on by default
completeUnimported = true,
analyses = {
unusedparams = true,
},
["ui.inlayhint.hints"] = {
compositeLiteralFields = true,
constantValues = true,
parameterNames = true,
rangeVariableTypes = true,
},
},
},
}
vim.lsp.enable("gopls")
vim.lsp.config.golangci_lint_ls = {
cmd = { "golangci-lint-langserver" },
filetypes = filetypes,
root_markers = root_markers,
}

View File

@@ -0,0 +1,62 @@
-- lua
vim.lsp.config.lua_ls = {
cmd = { "lua-language-server" },
filetypes = { "lua" },
root_markers = { ".luarc.json", ".git", vim.uv.cwd() },
settings = {
Lua = {
telemetry = {
enable = false,
},
diagnostics = {
globals = { "vim" },
},
},
},
}
vim.lsp.enable("lua_ls")
-- json
vim.lsp.config.json_ls = {
cmd = { "vscode-json-language-server", "--stdio" },
filetypes = { "json", "jsonc" },
root_markers = { vim.uv.cwd() },
settings = {
json = {
schemas = require("schemastore").json.schemas(),
validate = {
enable = true,
},
},
},
}
vim.lsp.enable("json_ls")
-- bash
vim.lsp.config.bashls = {
cmd = { "bash-language-server", "start" },
filetypes = { "bash", "sh" },
root_markers = { ".git", vim.uv.cwd() },
settings = {
bashIde = {
globPattern = vim.env.GLOB_PATTERN or "*@(.sh|.inc|.bash|.command)",
},
},
}
vim.lsp.enable("bashls")
-- docker compose
vim.lsp.config.compose_ls = {
cmd = { "docker-compose-langserver", "--stdio" },
filetypes = { "yaml" },
root_markers = { "docker-compose.yml", vim.uv.cwd() },
}
vim.lsp.enable("compose_ls")
-- docker
vim.lsp.config.docker_ls = {
cmd = { "docker-langserver", "--stdio" },
filetypes = { "dockerfile" },
root_markers = { "Dockerfile", ".git", vim.uv.cwd() },
}
vim.lsp.enable("docker_ls")

View File

@@ -0,0 +1,144 @@
-- typescript
vim.lsp.config.ts_ls = {
cmd = { "typescript-language-server", "--stdio" },
filetypes = { "javascript", "javascriptreact", "javascript.jsx", "typescript", "typescriptreact", "typescript.tsx" },
root_markers = { "tsconfig.json", "jsconfig.json", "package.json", ".git", vim.uv.cwd() },
init_options = {
hostInfo = "neovim",
},
}
vim.lsp.enable("ts_ls")
-- css
vim.lsp.config.cssls = {
cmd = { "vscode-css-language-server", "--stdio" },
filetypes = { "css", "scss" },
root_markers = { "package.json", ".git", vim.uv.cwd() },
init_options = {
provideFormatter = false,
},
}
vim.lsp.enable("cssls")
-- cssmodules
vim.lsp.config.cssmodules_ls = {
cmd = { "cssmodules-language-server" },
filetypes = {
"css",
"scss",
"javascript",
"javascript.jsx",
"javascriptreact",
"typescript",
"typescript.tsx",
"typescriptreact",
},
root_markers = { "package.json", ".git", vim.uv.cwd() },
init_options = {
camelCase = true,
},
}
vim.lsp.enable("cssmodules_ls")
-- tailwindcss
vim.lsp.config.tailwindcssls = {
cmd = { "tailwindcss-language-server", "--stdio" },
filetypes = {
"html",
"css",
"scss",
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
},
root_markers = {
"tailwind.config.js",
"tailwind.config.cjs",
"tailwind.config.mjs",
"tailwind.config.ts",
"postcss.config.js",
"postcss.config.cjs",
"postcss.config.mjs",
"postcss.config.ts",
"package.json",
"node_modules",
},
settings = {
tailwindCSS = {
classAttributes = { "class", "className", "class:list", "classList" },
includeLanguages = {
templ = "html",
},
lint = {
cssConflict = "warning",
invalidApply = "error",
invalidConfigPath = "error",
invalidScreen = "error",
invalidTailwindDirective = "error",
invalidVariant = "error",
recommendedVariantOrder = "warning",
},
validate = true,
},
},
}
vim.lsp.enable("tailwindcssls")
-- html
vim.lsp.config.htmlls = {
cmd = { "vscode-html-language-server", "--stdio" },
filetypes = { "html" },
root_markers = { "package.json", ".git", vim.uv.cwd() },
init_options = {
configurationSection = { "html", "css", "javascript" },
embeddedLanguages = {
css = true,
javascript = true,
},
},
}
vim.lsp.enable("htmlls")
-- emmet
vim.lsp.config.emmet_ls = {
cmd = { "emmet-ls", "--stdio" },
filetypes = {
"html",
"css",
"scss",
"javascript",
"javascript.jsx",
"javascriptreact",
"typescript",
"typescript.tsx",
"typescriptreact",
},
root_markers = { "package.json", ".git", vim.uv.cwd() },
}
vim.lsp.enable("emmet_ls")
-- eslint
vim.lsp.config.eslint_ls = {
cmd = { "vscode-eslint-language-server", "--stdio" },
filetypes = {
"javascript",
"javascript.jsx",
"javascriptreact",
"typescript",
"typescript.tsx",
"typescriptreact",
},
root_markers = {
".eslintrc.json",
"eslint.config.js",
"eslint.config.mjs",
"eslint.config.cjs",
"eslint.config.ts",
"eslint.config.mts",
"eslint.config.cts",
},
}
-- vim.lsp.enable("eslint_ls")