Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 56 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,15 +90,68 @@ require("colorizer").setup({

-- Per-filetype overrides
require("colorizer").setup({
options = {
-- base options applied to every filetype unless overridden below
parsers = {
hex = { default = false },
names = { enable = false },
tailwind = { enable = false },
},
},
filetypes = {
"*",
"!markdown",
html = { mode = "foreground" },
cmp_docs = { always_update = true },
"!markdown", -- exclude markdown entirely
html = { mode = "foreground" }, -- legacy flat key
cmp_docs = { always_update = true }, -- legacy flat key
-- Each entry can also use the same nested format as `options`,
-- deep-merged on top of the base options:
css = {
parsers = {
hex = { default = true },
oklch = { enable = true },
},
},
javascriptreact = {
parsers = { tailwind = { enable = true, lsp = true } },
},
},
buftypes = {
-- Same override format works for buftypes
terminal = { parsers = { hex = { default = true } } },
},
})

-- Enabling a parser per-filetype: both shapes below are valid
require("colorizer").setup({
options = {
parsers = { names = { enable = false } }, -- disabled by default
},
filetypes = {
html = { names = true }, -- legacy flat shorthand
css = { parsers = { names = { enable = true, lowercase = false } } }, -- nested new-format
},
})
```

> Each value in `filetypes` / `buftypes` accepts **either** the nested
> format (`parsers = {...}`, `display = {...}`, `hooks = {...}`,
> `always_update`) **or** legacy flat keys (`mode`, `names`, `RGB`,
> `rgb_fn`, …). Both shapes are translated and deep-merged onto the base
> `options`, so you only need to specify what changes for that filetype.
>
> This mixed-format compatibility is intentional for `filetypes` /
> `buftypes` overrides even though the top-level recommended shape is
> `options = { ... }` — it lets short per-filetype tweaks stay terse.
>
> In summary
>
> - flat legacy parser keys (`names`, `RGB`, `rgb_fn`, …) go **directly**
> on the filetype table, e.g. `html = { names = true }`
> - structured parser config goes **under `parsers`**, e.g.
> `html = { parsers = { names = { enable = true } } }`
> - to tweak sub-options (`lowercase`, `camelcase`, …) use the nested
> form — the flat shorthand only toggles `enable`

## Parser options

### Hex `default` key
Expand Down
24 changes: 24 additions & 0 deletions tests/test_new_options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -911,6 +911,30 @@ T["translate_filetypes"]["override translates legacy options"] = function()
eq(true, new.overrides.html.parsers.hsl.enable)
end

T["translate_filetypes"]["override translates legacy names shorthand"] = function()
local new = config.translate_filetypes({
html = { names = true },
})
eq(true, new.overrides.html.parsers.names.enable)
end

T["translate_filetypes"]["override translates legacy names_opts"] = function()
local new = config.translate_filetypes({
html = { names = true, names_opts = { lowercase = false, camelcase = true } },
})
eq(true, new.overrides.html.parsers.names.enable)
eq(false, new.overrides.html.parsers.names.lowercase)
eq(true, new.overrides.html.parsers.names.camelcase)
end

T["translate_filetypes"]["override accepts nested new-format parser key"] = function()
local new = config.translate_filetypes({
html = { parsers = { names = { enable = true, lowercase = false } } },
})
eq(true, new.overrides.html.parsers.names.enable)
eq(false, new.overrides.html.parsers.names.lowercase)
end

T["translate_filetypes"]["new format fills missing keys"] = function()
local new = config.translate_filetypes({ enable = { "*" } })
eq("*", new.enable[1])
Expand Down
Loading