diff options
Diffstat (limited to '.config/nvim/lsp/tailwindcss.lua')
| -rw-r--r-- | .config/nvim/lsp/tailwindcss.lua | 135 | 
1 files changed, 135 insertions, 0 deletions
diff --git a/.config/nvim/lsp/tailwindcss.lua b/.config/nvim/lsp/tailwindcss.lua new file mode 100644 index 0000000..1608d52 --- /dev/null +++ b/.config/nvim/lsp/tailwindcss.lua @@ -0,0 +1,135 @@ +---@brief +--- https://github.com/tailwindlabs/tailwindcss-intellisense +--- +--- Tailwind CSS Language Server can be installed via npm: +--- +--- npm install -g @tailwindcss/language-server +local util = require 'lspconfig.util' + +---@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 = util.insert_package_json(root_files, 'tailwindcss', fname) +    root_files = util.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, +}  |