nerd stuff
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}