diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-04-27 14:12:18 +0300 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-04-27 14:12:18 +0300 |
| commit | 21107f040b1579c1139ef0ca2ce993603d24826f (patch) | |
| tree | ec72798215c80179689b9a92d1f147308771244d /.config/nvim/lsp/tailwindcss.lua | |
| parent | 49be66e67afbbe27b4d93ec1ff39bc6c1d97e3ef (diff) | |
Massive nvim refactor, migrated from nvim-lspconfig to NVIM 0.11 lsp/*
also migrated most LSP clients to nix rather than mason
Diffstat (limited to '.config/nvim/lsp/tailwindcss.lua')
| -rw-r--r-- | .config/nvim/lsp/tailwindcss.lua | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/.config/nvim/lsp/tailwindcss.lua b/.config/nvim/lsp/tailwindcss.lua new file mode 100644 index 0000000..485e44d --- /dev/null +++ b/.config/nvim/lsp/tailwindcss.lua @@ -0,0 +1,133 @@ +-- https://github.com/tailwindlabs/tailwindcss-intellisense + +local function insert_package_json(config_files, field, fname) + local path = vim.fn.fnamemodify(fname, ':h') + local root_with_package = vim.fs.dirname(vim.fs.find('package.json', { path = path, upward = true })[1]) + + if root_with_package then + -- only add package.json if it contains field parameter + local path_sep = '/' + for line in io.lines(root_with_package .. path_sep .. 'package.json') do + if line:find(field) then + config_files[#config_files + 1] = 'package.json' + break + end + end + end + return config_files +end + +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', + eruby = 'erb', + templ = 'html', + htmlangular = '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 = { + 'tailwind.config.js', + 'tailwind.config.cjs', + 'tailwind.config.mjs', + 'tailwind.config.ts', + 'postcss.config.js', + 'postcss.config.cjs', + 'postcss.config.mjs', + 'postcss.config.ts', + } + local fname = vim.api.nvim_buf_get_name(bufnr) + root_files = insert_package_json(root_files, 'tailwindcss', fname) + on_dir(vim.fs.dirname(vim.fs.find(root_files, { path = fname, upward = true })[1])) + end, +} |
