From fdd507455a10c3841027c04ab33012d24d5b2c92 Mon Sep 17 00:00:00 2001 From: HiPhish Date: Fri, 24 Nov 2023 21:00:05 +0100 Subject: [PATCH] Add highlight priority setting --- CHANGELOG.rst | 7 ++++ CONTRIBUTING.rst | 1 + README.rst | 13 +++++- doc/rainbow-delimiters.txt | 14 +++++++ lua/rainbow-delimiters.types.lua | 66 ++++++++++++++++++++++++++++++ lua/rainbow-delimiters/config.lua | 5 +++ lua/rainbow-delimiters/default.lua | 8 ++++ lua/rainbow-delimiters/lib.lua | 2 +- test/highlight/c/regular.c | 4 ++ 9 files changed, 117 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a08f606..f900228 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -15,6 +15,7 @@ Unreleased Added ===== +- Ability to set highlight priority - Cue support - Luadoc support - Nim support @@ -30,6 +31,12 @@ Fixed - Missing `switch_body` pattern for Javascript and Typescript - Missing `rec_attrset_expression` and `inherit_from` patterns for Nix +Changed +======= + +- Default highlight priority is 110 instead of 210, which is between + Tree-sitter and LSP semantic tokens + [0.1.0] - 2023-11-12 #################### diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 9faf694..4781d54 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -34,4 +34,5 @@ for a new language. You will need to update: - `@class rainbow_delimiters.config.strategies` - `@class rainbow_delimiters.config.queries` +- `@class rainbow_delimiters.config.priorities` - `@alias rainbow_delimiters.language` diff --git a/README.rst b/README.rst index 02a3e6a..4cf0a04 100644 --- a/README.rst +++ b/README.rst @@ -28,8 +28,9 @@ for each language you want to use rainbow delimiters with. Setup ===== -Configuration is done by setting entries in the Vim script dictionary -`g:rainbow_delimiters`. Here is an example configuration: +No configuration is needed to get started, this plugin has reasonable defaults +which you can override. Configuration is done by setting entries in the Vim +script dictionary `g:rainbow_delimiters`. Here is an example configuration: .. code:: vim @@ -42,6 +43,10 @@ Configuration is done by setting entries in the Vim script dictionary \ '': 'rainbow-delimiters', \ 'lua': 'rainbow-blocks', \ }, + \ 'priority': { + \ '': 110, + \ 'lua': 210, + \ }, \ 'highlight': [ \ 'RainbowDelimiterRed', \ 'RainbowDelimiterYellow', @@ -70,6 +75,10 @@ The equivalent code in Lua: [''] = 'rainbow-delimiters', lua = 'rainbow-blocks', }, + priority = { + [''] = 110, + lua = 210, + }, highlight = { 'RainbowDelimiterRed', 'RainbowDelimiterYellow', diff --git a/doc/rainbow-delimiters.txt b/doc/rainbow-delimiters.txt index 5ea8c71..42e0de9 100644 --- a/doc/rainbow-delimiters.txt +++ b/doc/rainbow-delimiters.txt @@ -58,6 +58,12 @@ keys are recognized: is the key for the default query. See |rb-delimiters-query| for more information about queries. +`priority` + Dictionary mapping Tree-sitter language names to highlight priority values. + The empty string is the key for the default priority. See + |vim.highlight.priorities| and |treesitter-highlight-priority| for more + information on priorities. + `highlight` List of names of the highlight groups to use for highlighting, for more information see |rb-delimiters-colors|. @@ -90,6 +96,10 @@ Here is an example configuration: \ '': 'rainbow-delimiters', \ 'lua': 'rainbow-blocks', \ }, + \ 'priority': { + \ '': 110, + \ 'lua': 210, + \ }, \ 'highlight': [ \ 'RainbowDelimiterRed', \ 'RainbowDelimiterYellow', @@ -118,6 +128,10 @@ Alternatively, the same configuration in Lua: [''] = 'rainbow-delimiters', lua = 'rainbow-blocks', }, + priority = { + [''] = 110, + lua = 210, + }, highlight = { 'RainbowDelimiterRed', 'RainbowDelimiterYellow', diff --git a/lua/rainbow-delimiters.types.lua b/lua/rainbow-delimiters.types.lua index de0abd9..506ab46 100644 --- a/lua/rainbow-delimiters.types.lua +++ b/lua/rainbow-delimiters.types.lua @@ -27,6 +27,8 @@ ---@field strategy rainbow_delimiters.config.strategies? ---Query to use for highlighting ---@field query rainbow_delimiters.config.queries? +---Highlight priority of rainbow delimiters +---@field priority rainbow_delimiters.config.priorities? ---Highlight colors ---@field highlight string[]? ---Whitelist for languages to highlight @@ -162,6 +164,70 @@ ---User defined language, not part of rainbow_delimiters support ---@field [string] string? +---@class rainbow_delimiters.config.priorities +---@field [''] (integer | fun(): integer?)? +---@field astro (integer | fun(): integer?)? +---@field bash (integer | fun(): integer?)? +---@field c (integer | fun(): integer?)? +---@field c_sharp (integer | fun(): integer?)? +---@field clojure (integer | fun(): integer?)? +---@field commonlisp (integer | fun(): integer?)? +---@field cpp (integer | fun(): integer?)? +---@field css (integer | fun(): integer?)? +---@field cuda (integer | fun(): integer?)? +---@field cue (integer | fun(): integer?)? +---@field dart (integer | fun(): integer?)? +---@field elixir (integer | fun(): integer?)? +---@field elm (integer | fun(): integer?)? +---@field fennel (integer | fun(): integer?)? +---@field fish (integer | fun(): integer?)? +---@field go (integer | fun(): integer?)? +---@field haskell (integer | fun(): integer?)? +---@field hcl (integer | fun(): integer?)? +---@field html (integer | fun(): integer?)? +---@field janet_simple (integer | fun(): integer?)? +---@field java (integer | fun(): integer?)? +---@field javascript (integer | fun(): integer?)? +---@field json (integer | fun(): integer?)? +---@field json5 (integer | fun(): integer?)? +---@field jsonc (integer | fun(): integer?)? +---@field jsonnet (integer | fun(): integer?)? +---@field julia (integer | fun(): integer?)? +---@field kotlin (integer | fun(): integer?)? +---@field latex (integer | fun(): integer?)? +---@field lua (integer | fun(): integer?)? +---@field luadoc (integer | fun(): integer?)? +---@field make (integer | fun(): integer?)? +---@field markdown (integer | fun(): integer?)? +---@field nim (integer | fun(): integer?)? +---@field nix (integer | fun(): integer?)? +---@field perl (integer | fun(): integer?)? +---@field php (integer | fun(): integer?)? +---@field python (integer | fun(): integer?)? +---@field query (integer | fun(): integer?)? +---@field r (integer | fun(): integer?)? +---@field racket (integer | fun(): integer?)? +---@field regex (integer | fun(): integer?)? +---@field rst (integer | fun(): integer?)? +---@field ruby (integer | fun(): integer?)? +---@field rust (integer | fun(): integer?)? +---@field scheme (integer | fun(): integer?)? +---@field scss (integer | fun(): integer?)? +---@field sql (integer | fun(): integer?)? +---@field templ (integer | fun(): integer?)? +---@field toml (integer | fun(): integer?)? +---@field tsx (integer | fun(): integer?)? +---@field typescript (integer | fun(): integer?)? +---@field verilog (integer | fun(): integer?)? +---@field vim (integer | fun(): integer?)? +---@field vimdoc (integer | fun(): integer?)? +---@field vue (integer | fun(): integer?)? +---@field yaml (integer | fun(): integer?)? +---@field zig (integer | fun(): integer?)? +---User defined language, not part of rainbow_delimiters support +---@field [integer] (integer | fun(): integer?)? + + ---@alias rainbow_delimiters.language ---| 'astro' ---| 'bash' diff --git a/lua/rainbow-delimiters/config.lua b/lua/rainbow-delimiters/config.lua index 1affdf1..39d884f 100644 --- a/lua/rainbow-delimiters/config.lua +++ b/lua/rainbow-delimiters/config.lua @@ -52,6 +52,11 @@ local M = { return get_nested(table, 'strategy', key) end }), + priority = setmetatable({}, { + __index = function(table, key) + return get_nested(table, 'priority', key) + end + }), log = setmetatable({}, { __index = function(table, key) return get_nested(table, 'log', key) diff --git a/lua/rainbow-delimiters/default.lua b/lua/rainbow-delimiters/default.lua index a21955a..7606dbf 100644 --- a/lua/rainbow-delimiters/default.lua +++ b/lua/rainbow-delimiters/default.lua @@ -26,6 +26,9 @@ local M = { strategy = { [''] = require 'rainbow-delimiters.strategy.global', }, + priority = { + [''] = 110, + }, ---Event logging settings log = { ---Log level of the module, see `:h log_levels`. @@ -61,6 +64,11 @@ setmetatable(M.strategy, { __index = get_with_fallback, }) +setmetatable(M.priority, { + __index = get_with_fallback, +}) + + return M -- vim:tw=79:ts=4:sw=4:noet: diff --git a/lua/rainbow-delimiters/lib.lua b/lua/rainbow-delimiters/lib.lua index fa41f90..55cd1eb 100644 --- a/lua/rainbow-delimiters/lib.lua +++ b/lua/rainbow-delimiters/lib.lua @@ -91,7 +91,7 @@ function M.highlight(bufnr, lang, node, hlgroup) local opts = { regtype = 'c', inclusive = true, - priority = 210, + priority = config.priority[lang], } local nsid = M.nsids[lang] diff --git a/test/highlight/c/regular.c b/test/highlight/c/regular.c index fd62d3f..97d6b7f 100644 --- a/test/highlight/c/regular.c +++ b/test/highlight/c/regular.c @@ -52,5 +52,9 @@ int main(int argc, char *argv[]) { printf("The sum of %d and %d is %d", ((((a)))), b, result); int indices[] = {0, }; int i = indices[indices[indices[indices[indices[indices[0]]]]]]; + #if 0 + /* A language server may mark this block semantically as a comment */ + printf("The sum of %d and %d is %d", ((((a)))), b, result); + #endif return 0; }