nvim/lua/nyanko/lazy/lspconfig.lua

148 lines
3.8 KiB
Lua
Raw Permalink Normal View History

2025-01-04 08:07:29 -06:00
return {
"neovim/nvim-lspconfig",
dependencies = {
{ "williamboman/mason.nvim", config = true },
"williamboman/mason-lspconfig.nvim",
"WhoIsSethDaniel/mason-tool-installer.nvim",
"hrsh7th/cmp-nvim-lsp",
-- useful LSP status updates
{ "j-hui/fidget.nvim", opts = {} },
},
config = function()
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("nyanko-lsp-attach", { clear = true }),
callback = function(event)
-- highlight references of the word under cursor
local client = vim.lsp.get_client_by_id(event.data.client_id)
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then
local highlight_augroup = vim.api.nvim_create_augroup("nyanko-lsp-highlight", { clear = false })
vim.api.nvim_create_autocmd({
"CursorHold",
"CursorHoldI",
}, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({
"CursorMoved",
"CursorMovedI",
}, {
buffer = event.buf,
group = highlight_augroup,
callback = vim.lsp.buf.clear_references,
})
vim.api.nvim_create_autocmd("LspDetach", {
group = vim.api.nvim_create_augroup("nyanko-lsp-detach", { clear = true }),
callback = function(detach_event)
vim.lsp.buf.clear_references()
vim.api.nvim_clear_autocmds({
group = "nyanko-lsp-highlight",
buffer = detach_event.buf,
})
end,
})
end
end,
})
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities())
local servers = {
2025-02-03 14:09:40 -06:00
clangd = {},
2025-01-04 08:07:29 -06:00
lua_ls = {
settings = {
Lua = {
completion = {
callSnippet = "replace",
},
},
},
},
2025-02-11 02:04:34 -06:00
gopls = {},
2025-01-04 08:07:29 -06:00
html = {},
cssls = {},
eslint = {
settings = {
workingDirectories = { mode = "auto" },
},
},
jsonls = {
settings = {
json = {
schemas = {
{
fileMatch = { "package.json" },
url = "https://json.schemastore.org/package.json",
},
{
fileMatch = { "tsconfig*.json" },
url = "https://json.schemastore.org/tsconfig.json",
},
{
fileMatch = { ".prettierrc", ".prettierrc.json" },
url = "https://json.schemastore.org/prettierrc.json",
},
{
fileMatch = { ".eslintrc", ".eslintrc.json" },
url = "https//json.schemastore.org/eslintrc.json",
},
},
},
},
},
ts_ls = {},
tailwindcss = {
settings = {
tailwindCSS = {
experimental = {
classRegex = {
"tw`([^`]*)",
'tw="([^"]*)',
'tw={"([^"}]*)',
"tw\\.\\w+`([^`]*)",
"tw\\(.*?\\)`([^`]*)",
{ "clsx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" },
{ "classnames\\(([^)]*)\\)", "'([^']*)'" },
{ "cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]" },
{ "cn\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" },
},
},
},
},
},
}
require("mason").setup()
2025-01-08 12:35:25 -06:00
vim.keymap.set("n", "<leader>om", "<cmd>Mason<cr>", { desc = "[O]pen [M]ason" })
2025-01-04 08:07:29 -06:00
local ensure_installed = vim.tbl_keys(servers or {})
vim.list_extend(ensure_installed, {
"stylua", -- used to format lua code
"prettierd",
})
require("mason-tool-installer").setup({
ensure_installed = ensure_installed,
})
require("mason-lspconfig").setup({
ensure_installed = {},
automatic_installation = false,
handlers = {
function(server_name)
local server = servers[server_name] or {}
server.capabilities = vim.tbl_deep_extend("force", {}, capabilities, server.capabilities or {})
require("lspconfig")[server_name].setup(server)
end,
},
})
end,
}