Power Profiles

This commit is contained in:
2026-07-14 16:24:04 -03:00
parent a265e1e37f
commit c815e6286b
12 changed files with 467 additions and 189 deletions
@@ -1,162 +1,24 @@
local function insert_package_json(root_files, field, fname)
local pkg_path = vim.fs.find("package.json", { upward = true, path = fname })[1]
if pkg_path then
local ok, content = pcall(vim.fn.readfile, pkg_path)
if ok then
local json = table.concat(content, "\n")
if string.find(json, '"' .. field .. '"') then
table.insert(root_files, pkg_path)
end
end
end
return root_files
end
local function root_markers_with_field(root_files, files, field, fname)
for _, f in ipairs(files) do
local path = vim.fs.find(f, { upward = true, path = fname })[1]
if path then
local ok, content = pcall(vim.fn.readfile, path)
if ok then
local text = table.concat(content, "\n")
if string.find(text, field) then
table.insert(root_files, path)
end
end
end
end
return root_files
end
---@brief
--- https://github.com/tailwindlabs/tailwindcss-intellisense
---
--- Tailwind CSS Language Server can be installed via npm:
---
--- npm install -g @tailwindcss/language-server
---@type vim.lsp.Config
return {
cmd = { "tailwindcss-language-server", "--stdio" },
-- filetypes copied and adjusted from tailwindcss-intellisense
filetypes = {
-- html
"aspnetcorerazor",
"astro",
"astro-markdown",
"blade",
"clojure",
"django-html",
"htmldjango",
"edge",
"eelixir", -- vim ft
"elixir",
"ejs",
"erb",
"eruby", -- vim ft
"gohtml",
"gohtmltmpl",
"haml",
"handlebars",
"hbs",
"html",
"htmlangular",
"html-eex",
"heex",
"jade",
"leaf",
"liquid",
"markdown",
"mdx",
"mustache",
"njk",
"nunjucks",
"php",
"razor",
"slim",
"twig",
-- css
"css",
"less",
"postcss",
"sass",
"scss",
"stylus",
"sugarss",
-- js
"javascript",
"javascriptreact",
"reason",
"rescript",
"typescript",
"typescriptreact",
-- mixed
"vue",
"svelte",
"templ",
},
settings = {
tailwindCSS = {
validate = true,
lint = {
cssConflict = "warning",
invalidApply = "error",
invalidScreen = "error",
invalidVariant = "error",
invalidConfigPath = "error",
invalidTailwindDirective = "error",
recommendedVariantOrder = "warning",
},
classAttributes = {
"class",
"className",
"class:list",
"classList",
"ngClass",
},
includeLanguages = {
eelixir = "html-eex",
elixir = "phoenix-heex",
eruby = "erb",
heex = "phoenix-heex",
htmlangular = "html",
templ = "html",
},
},
},
before_init = function(_, config)
if not config.settings then
config.settings = {}
end
if not config.settings.editor then
config.settings.editor = {}
end
if not config.settings.editor.tabSize then
config.settings.editor.tabSize = vim.lsp.util.get_effective_tabstop()
end
end,
workspace_required = true,
root_dir = function(bufnr, on_dir)
local root_files = {
-- Generic
"tailwind.config.js",
"tailwind.config.cjs",
"tailwind.config.mjs",
"tailwind.config.ts",
"postcss.config.js",
"postcss.config.cjs",
"postcss.config.mjs",
"postcss.config.ts",
-- Django
"theme/static_src/tailwind.config.js",
"theme/static_src/tailwind.config.cjs",
"theme/static_src/tailwind.config.mjs",
"theme/static_src/tailwind.config.ts",
"theme/static_src/postcss.config.js",
-- Fallback for tailwind v4, where tailwind.config.* is not required anymore
".git",
}
local fname = vim.api.nvim_buf_get_name(bufnr)
root_files = insert_package_json(root_files, "tailwindcss", fname)
root_files = root_markers_with_field(root_files, { "mix.lock", "Gemfile.lock" }, "tailwind", fname)
on_dir(vim.fs.dirname(vim.fs.find(root_files, { path = fname, upward = true })[1]))
end,
cmd = { "tailwindcss-language-server", "--stdio" },
filetypes = {
"html", "css", "scss", "javascript", "javascriptreact",
"typescript", "typescriptreact", "svelte", "vue", "astro",
},
root_markers = {
"tailwind.config.js", "tailwind.config.cjs", "tailwind.config.ts",
"postcss.config.js", "package.json", ".git",
},
settings = {
tailwindCSS = {
validate = true,
classAttributes = { "class", "className", "classList", "ngClass" },
-- for cn()/clsx()/cva() wrappers:
experimental = {
classRegex = {
{ "cva%(([^)]*)%)", "[\"'`]([^\"'`]*).*?[\"'`]" },
{ "cn%(([^)]*)%)", "[\"'`]([^\"'`]*).*?[\"'`]" },
},
},
},
},
}
@@ -1,4 +1,5 @@
vim.lsp.enable("ts_ls")
vim.lsp.enable("tailwindcss")
vim.lsp.enable("gopls")
-- vim.lsp.enable("tailwindcss")