85 lines
2.3 KiB
Lua
85 lines
2.3 KiB
Lua
return {
|
|
'mini.hipatterns',
|
|
event = { 'BufReadPost', 'BufWritePost', 'BufNewFile' },
|
|
after = function()
|
|
local hipatterns = require('mini.hipatterns')
|
|
|
|
-- Tailwind CSS support.
|
|
local hls = {}
|
|
local tailwindFts = {
|
|
'astro',
|
|
'css',
|
|
'heex',
|
|
'html',
|
|
'html-eex',
|
|
'javascript',
|
|
'javascriptreact',
|
|
'rust',
|
|
'svelte',
|
|
'typescript',
|
|
'typescriptreact',
|
|
'vue',
|
|
}
|
|
|
|
-- Reset hl groups when colorscheme changes.
|
|
vim.api.nvim_create_autocmd('ColorScheme', {
|
|
callback = function()
|
|
hls = {}
|
|
end,
|
|
})
|
|
|
|
hipatterns.setup({
|
|
highlighters = {
|
|
hex_color = hipatterns.gen_highlighter.hex_color({ priority = 2000 }),
|
|
shorthand = {
|
|
pattern = '()#%x%x%x()%f[^%x%w]',
|
|
group = function(_, _, data)
|
|
---@type string
|
|
local match = data.full_match
|
|
local r, g, b = match:sub(2, 2), match:sub(3, 3), match:sub(4, 4)
|
|
local hex_color = '#' .. r .. r .. g .. g .. b .. b
|
|
|
|
return MiniHipatterns.compute_hex_color_group(hex_color, 'bg')
|
|
end,
|
|
extmark_opts = { priority = 2000 },
|
|
},
|
|
tailwind = {
|
|
pattern = function()
|
|
if not vim.tbl_contains(tailwindFts, vim.bo.filetype) then
|
|
return
|
|
end
|
|
|
|
return '%f[%w:-]()[%w:-]+%-[a-z%-]+%-%d+()%f[^%w:-]'
|
|
end,
|
|
group = function(_, _, m)
|
|
---@type string
|
|
local match = m.full_match
|
|
|
|
---@type string, number?
|
|
local color, shade = match:match('[%w-]+%-([a-z%-]+)%-(%d+)')
|
|
shade = tonumber(shade)
|
|
|
|
local c = require('colors')
|
|
local bg = vim.tbl_get(c.tailwind, color, shade)
|
|
if bg then
|
|
local hl = 'MiniHipatternsTailwind' .. color .. shade
|
|
if not hls[hl] then
|
|
hls[hl] = true
|
|
|
|
local bg_shade = shade == 500 and 950
|
|
or shade < 500 and 900
|
|
or 100
|
|
local fg = vim.tbl_get(c.tailwind, color, bg_shade)
|
|
|
|
vim.api.nvim_set_hl(0, hl, { bg = '#' .. bg, fg = '#' .. fg })
|
|
end
|
|
|
|
return hl
|
|
end
|
|
end,
|
|
extmark_opts = { priority = 2000 },
|
|
},
|
|
},
|
|
})
|
|
end,
|
|
}
|