From 9e589bc70cdcb2208a3cc54a2fc1311b9b2e0ade Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Fri, 8 May 2026 21:40:46 +0545 Subject: [PATCH] feat(lua): expand LuaLSP, Treesitter and pack helper configurations Why: improve language support and fix a client API typo - New Features - Added extensive filetype list for Tailwind LSP (astro, blade, ejs, etc.) and enabled the language server - Extended Treesitter parser list with regex, latex, tsx, svelte, typst, vue - Introduced PackChanged autocmd that notifies on install/update builds - Enhancements - Disabled unused provider loaders (node, perl, python3, ruby) - Registered additional filetype handlers for various template extensions - Updated markdown style setting and filledchars option - Bug Fixes - Corrected client:supports_method call in autocmd.lua (removed stray colon) --- lua/autocmd.lua | 2 +- lua/extensions.lua | 6 ++++++ lua/lsp.lua | 40 ++++++++++++++++++++++++++++++++++++++++ lua/options.lua | 24 ++++++++++++++++++++++++ lua/pack_helper.lua | 27 +++++++++++++++++++++++++++ 5 files changed, 98 insertions(+), 1 deletion(-) diff --git a/lua/autocmd.lua b/lua/autocmd.lua index 4299337..16540de 100644 --- a/lua/autocmd.lua +++ b/lua/autocmd.lua @@ -121,7 +121,7 @@ vim.api.nvim_create_autocmd("LspAttach", { group = augroup("lsp_attach_autocmds"), callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) - if client and client.supports_method("textDocument/documentHighlight") then + if client and client:supports_method("textDocument/documentHighlight") then vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { buffer = args.buf, callback = vim.lsp.buf.document_highlight, diff --git a/lua/extensions.lua b/lua/extensions.lua index abad39e..e06b882 100644 --- a/lua/extensions.lua +++ b/lua/extensions.lua @@ -21,6 +21,12 @@ local treesitter_parsers = { "css", "scss", "markdown_inline", + "regex", + "latex", + "tsx", + "svelte", + "typst", + "vue", } local lsp_server = { diff --git a/lua/lsp.lua b/lua/lsp.lua index 843f090..fda1df6 100644 --- a/lua/lsp.lua +++ b/lua/lsp.lua @@ -36,6 +36,46 @@ vim.schedule(function() vim.lsp.enable("html") vim.lsp.enable("cssls") + vim.lsp.config("tailwindcss", { + filetypes = { + "astro", + "blade", + "edge", + "ejs", + "erb", + "gohtml", + "gohtmltmpl", + "handlebars", + "hbs", + "html", + "jade", + "leaf", + "liquid", + "markdown", + "mdx", + "mustache", + "nunjucks", + "php", + "razor", + "slim", + "twig", + "css", + "less", + "postcss", + "sass", + "scss", + "stylus", + "sugarss", + "javascript", + "javascriptreact", + "rescript", + "typescript", + "typescriptreact", + "vue", + "svelte", + "templ", + }, + }) vim.lsp.enable("tailwindcss") -- rust diff --git a/lua/options.lua b/lua/options.lua index e335ea4..ad395b7 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -58,6 +58,11 @@ end vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 +vim.g.loaded_node_provider = 0 +vim.g.loaded_perl_provider = 0 +vim.g.loaded_python3_provider = 0 +vim.g.loaded_ruby_provider = 0 + vim.opt.path:append({ "**" }) vim.opt.shortmess:append({ W = true, I = true, c = true }) -- disable greeting @@ -65,3 +70,22 @@ vim.opt.shortmess:append({ W = true, I = true, c = true }) -- disable greeting vim.g.markdown_recommended_style = 0 vim.cmd([[set fillchars+=eob:\ ]]) + +vim.filetype.add({ + extension = { + astro = "astro", + ejs = "ejs", + hbs = "hbs", + njk = "nunjucks", + postcss = "postcss", + razor = "razor", + slim = "slim", + sugarss = "sugarss", + edge = "edge", + jade = "jade", + leaf = "leaf", + erb = "erb", + gohtml = "gohtml", + gohtmltmpl = "gohtmltmpl", + }, +}) diff --git a/lua/pack_helper.lua b/lua/pack_helper.lua index 67a0919..c60ed54 100644 --- a/lua/pack_helper.lua +++ b/lua/pack_helper.lua @@ -30,4 +30,31 @@ _G.add = function(specs) if #res > 0 then pcall(vim.pack.add, res, { confirm = false }) end end +vim.api.nvim_create_autocmd("PackChanged", { + callback = function(ev) + local spec = ev.data.spec + local kind = ev.data.kind + local path = ev.data.path + if spec.build and (kind == "install" or kind == "update") then + vim.notify("Building " .. (spec.name or spec.src) .. "...", vim.log.levels.INFO, { title = "vim.pack" }) + local cmd = type(spec.build) == "string" and { "sh", "-c", spec.build } or spec.build + vim.system(cmd, { cwd = path }, function(res) + if res.code ~= 0 then + vim.notify( + "Build failed for " .. (spec.name or spec.src) .. ": " .. res.stderr, + vim.log.levels.ERROR, + { title = "vim.pack" } + ) + else + vim.notify( + "Build successful for " .. (spec.name or spec.src), + vim.log.levels.INFO, + { title = "vim.pack" } + ) + end + end) + end + end, +}) + return M