at main 4.5 kB view raw
1return { 2 { 3 "williamboman/mason.nvim", 4 dependencies = { 5 "williamboman/mason-lspconfig.nvim", 6 }, 7 config = function() 8 require("mason").setup() 9 require("mason-lspconfig").setup({ 10 ensure_installed = { 11 --lsp 12 "lua_ls", 13 "rust_analyzer", 14 "html", 15 "astro", 16 "cssls", 17 "tailwindcss", 18 "ts_ls", 19 "dockerls", 20 "gopls", 21 "jsonls", 22 "basedpyright", 23 "svelte", 24 "jdtls", 25 "mdx_analyzer", 26 }, 27 }) 28 end, 29 }, 30 { 31 "neovim/nvim-lspconfig", 32 dependencies = { 33 "stevearc/conform.nvim", 34 }, 35 config = function() 36 local capabilities = require("cmp_nvim_lsp").default_capabilities() 37 local lspconfig = require("lspconfig") 38 local opts = { 39 capabilities = capabilities 40 } 41 lspconfig.lua_ls.setup(opts) 42 lspconfig.rust_analyzer.setup(opts) 43 lspconfig.html.setup({ 44 capabilities = capabilities, 45 filetypes = { "html", "templ"} 46 }) 47 lspconfig.astro.setup(opts) 48 lspconfig.cssls.setup(opts) 49 lspconfig.tailwindcss.setup({ 50 capabilities = capabilities, 51 filetypes = { "templ", "astro", "javascript", "typescript", "react" }, 52 settings = { 53 tailwindCSS = { 54 experimental = { 55 classRegex = { 56 { 'add="([^"]*)"', "[^\\s]+" }, 57 { "clsx\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" }, 58 { "classnames\\(([^)]*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)" }, 59 }, 60 }, 61 }, 62 }, 63 }) 64 lspconfig.ts_ls.setup(opts) 65 lspconfig.dockerls.setup(opts) 66 lspconfig.gopls.setup(opts) 67 lspconfig.jsonls.setup(opts) 68 lspconfig.basedpyright.setup(opts) 69 lspconfig.svelte.setup(opts) 70 lspconfig.jdtls.setup(opts) 71 lspconfig.mdx_analyzer.setup(opts) 72 73 require("conform").setup({ 74 formatters_by_ft = { 75 lua = { "stylua" }, 76 rust = { "rustfmt", lsp_format = "fallback" }, 77 astro = { "prettierd", "prettier", stop_after_first = true }, 78 html = { "prettierd", "prettier", stop_after_first = true }, 79 javascript = { "prettierd", "prettier", stop_after_first = true }, 80 typescript = { "prettierd", "prettier", stop_after_first = true }, 81 json = { "jq" }, 82 go = { "gofmtpt" }, 83 }, 84 format_on_save = { 85 timeout_ms = 3000, 86 }, 87 }) 88 89 vim.keymap.set("n", "<leader>h", vim.lsp.buf.hover, { desc = "[H]over" }) 90 vim.keymap.set("n", "gd", vim.lsp.buf.definition, { desc = "[G]o to [D]efinition" }) 91 vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { desc = "[G]o to [D]eclaration" }) 92 vim.keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, { desc = "[C]ode [A]ctions" }) 93 vim.keymap.set("n", "<leader>cf", require("conform").format, { desc = "[C]ode [F]ormat" }) 94 vim.api.nvim_create_autocmd("LspAttach", { 95 callback = function(args) 96 local client = vim.lsp.get_client_by_id(args.data.client_id) 97 if not client then 98 return 99 end 100 if client.supports_method("textDocument/formatting") then 101 vim.api.nvim_create_autocmd("BufWritePre", { 102 buffer = args.buf, 103 callback = function() 104 require("conform").format({ bufnr = args.buf, id = client.id }) 105 end, 106 }) 107 end 108 end, 109 }) 110 end, 111 }, 112 { 113 "mfussenegger/nvim-jdtls", 114 }, 115}