mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 16:39:00 +02:00
plugins/rainbow-delimiters: init + test (replaces treesitter-rainbow)
This commit is contained in:
parent
ee2e15b58b
commit
ebfaa31df3
5 changed files with 286 additions and 97 deletions
|
@ -46,10 +46,10 @@
|
||||||
./languages/rust.nix
|
./languages/rust.nix
|
||||||
./languages/sniprun.nix
|
./languages/sniprun.nix
|
||||||
./languages/tagbar.nix
|
./languages/tagbar.nix
|
||||||
|
./languages/treesitter/rainbow-delimiters.nix
|
||||||
./languages/treesitter/treesitter.nix
|
./languages/treesitter/treesitter.nix
|
||||||
./languages/treesitter/treesitter-context.nix
|
./languages/treesitter/treesitter-context.nix
|
||||||
./languages/treesitter/treesitter-playground.nix
|
./languages/treesitter/treesitter-playground.nix
|
||||||
./languages/treesitter/treesitter-rainbow.nix
|
|
||||||
./languages/treesitter/treesitter-refactor.nix
|
./languages/treesitter/treesitter-refactor.nix
|
||||||
./languages/treesitter/ts-autotag.nix
|
./languages/treesitter/ts-autotag.nix
|
||||||
./languages/treesitter/ts-context-commentstring.nix
|
./languages/treesitter/ts-context-commentstring.nix
|
||||||
|
|
222
plugins/languages/treesitter/rainbow-delimiters.nix
Normal file
222
plugins/languages/treesitter/rainbow-delimiters.nix
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
helpers = import ../../helpers.nix {inherit lib;};
|
||||||
|
in {
|
||||||
|
# TODO those warnings have been added XX/XX/2023
|
||||||
|
# -> Remove them in ~ 1 month (oct. 2023)
|
||||||
|
imports =
|
||||||
|
mapAttrsToList
|
||||||
|
(
|
||||||
|
old: new:
|
||||||
|
mkRenamedOptionModule
|
||||||
|
["plugins" "treesitter-rainbow" old]
|
||||||
|
["plugins" "rainbow-delimiters" new]
|
||||||
|
)
|
||||||
|
{
|
||||||
|
enable = "enable";
|
||||||
|
package = "package";
|
||||||
|
strategy = "strategy";
|
||||||
|
query = "query";
|
||||||
|
disable = "blacklist";
|
||||||
|
hlgroups = "highlight";
|
||||||
|
};
|
||||||
|
|
||||||
|
options.plugins.rainbow-delimiters =
|
||||||
|
helpers.extraOptionsOptions
|
||||||
|
// {
|
||||||
|
enable = mkEnableOption "rainbow-delimiters.nvim";
|
||||||
|
|
||||||
|
package =
|
||||||
|
helpers.mkPackageOption
|
||||||
|
"rainbow-delimiters.nvim"
|
||||||
|
pkgs.vimPlugins.rainbow-delimiters-nvim;
|
||||||
|
|
||||||
|
strategy =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(
|
||||||
|
with types;
|
||||||
|
attrsOf (
|
||||||
|
either
|
||||||
|
helpers.rawType
|
||||||
|
(enum ["global" "local" "noop"])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
''
|
||||||
|
{
|
||||||
|
default = "global";
|
||||||
|
}
|
||||||
|
''
|
||||||
|
''
|
||||||
|
Attrs mapping Tree-sitter language names to strategies.
|
||||||
|
See `|rb-delimiters-strategy|` for more information about strategies.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
# Use global strategy by default
|
||||||
|
default = "global";
|
||||||
|
|
||||||
|
# Use local for HTML
|
||||||
|
html = "local";
|
||||||
|
|
||||||
|
# Pick the strategy for LaTeX dynamically based on the buffer size
|
||||||
|
latex.__raw = \'\'
|
||||||
|
function()
|
||||||
|
-- Disabled for very large files, global strategy for large files,
|
||||||
|
-- local strategy otherwise
|
||||||
|
if vim.fn.line('$') > 10000 then
|
||||||
|
return nil
|
||||||
|
elseif vim.fn.line('$') > 1000 then
|
||||||
|
return require 'rainbow-delimiters'.strategy['global']
|
||||||
|
end
|
||||||
|
return require 'rainbow-delimiters'.strategy['local']
|
||||||
|
end
|
||||||
|
\'\';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
'';
|
||||||
|
|
||||||
|
query =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(with types; attrsOf str)
|
||||||
|
''
|
||||||
|
{
|
||||||
|
default = "rainbow-delimiters";
|
||||||
|
lua = "rainbow-blocks";
|
||||||
|
}
|
||||||
|
''
|
||||||
|
''
|
||||||
|
Attrs mapping Tree-sitter language names to queries.
|
||||||
|
See `|rb-delimiters-query|` for more information about queries.
|
||||||
|
'';
|
||||||
|
|
||||||
|
highlight =
|
||||||
|
helpers.defaultNullOpts.mkNullable (with types; listOf str)
|
||||||
|
''
|
||||||
|
[
|
||||||
|
"RainbowDelimiterRed"
|
||||||
|
"RainbowDelimiterYellow"
|
||||||
|
"RainbowDelimiterBlue"
|
||||||
|
"RainbowDelimiterOrange"
|
||||||
|
"RainbowDelimiterGreen"
|
||||||
|
"RainbowDelimiterViolet"
|
||||||
|
"RainbowDelimiterCyan"
|
||||||
|
]
|
||||||
|
''
|
||||||
|
''
|
||||||
|
List of names of the highlight groups to use for highlighting, for more information see
|
||||||
|
`|rb-delimiters-colors|`.
|
||||||
|
'';
|
||||||
|
|
||||||
|
whitelist = helpers.mkNullOrOption (with types; listOf str) ''
|
||||||
|
List of Tree-sitter languages for which to enable rainbow delimiters.
|
||||||
|
Rainbow delimiters will be disabled for all other languages.
|
||||||
|
'';
|
||||||
|
|
||||||
|
blacklist = helpers.mkNullOrOption (with types; listOf str) ''
|
||||||
|
List of Tree-sitter languages for which to disable rainbow delimiters.
|
||||||
|
Rainbow delimiters will be enabled for all other languages.
|
||||||
|
'';
|
||||||
|
|
||||||
|
log = {
|
||||||
|
file =
|
||||||
|
helpers.defaultNullOpts.mkNullable
|
||||||
|
(with types; either str helpers.rawType)
|
||||||
|
''
|
||||||
|
{
|
||||||
|
__raw = "vim.fn.stdpath('log') .. '/rainbow-delimiters.log'";
|
||||||
|
}
|
||||||
|
''
|
||||||
|
''
|
||||||
|
Path to the log file, default is `rainbow-delimiters.log` in your standard log path
|
||||||
|
(see `|standard-path|`).
|
||||||
|
'';
|
||||||
|
|
||||||
|
level =
|
||||||
|
helpers.defaultNullOpts.mkEnum
|
||||||
|
["debug" "error" "info" "trace" "warn" "off"]
|
||||||
|
"warn"
|
||||||
|
''
|
||||||
|
Only messages equal to or above this value will be logged.
|
||||||
|
The default is to log warnings or above.
|
||||||
|
See `|log_levels|` for possible values.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = let
|
||||||
|
cfg = config.plugins.rainbow-delimiters;
|
||||||
|
in
|
||||||
|
mkIf cfg.enable {
|
||||||
|
warnings =
|
||||||
|
optional
|
||||||
|
(!config.plugins.treesitter.enable)
|
||||||
|
"Nixvim: treesitter-rainbow needs treesitter to function as intended";
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = (cfg.whitelist == null) || (cfg.blacklist == null);
|
||||||
|
message = ''
|
||||||
|
Both `rainbow-delimiters.whitelist` and `rainbow-delimiters.blacklist` should not be
|
||||||
|
set simultaneously.
|
||||||
|
Please remove one of them.
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
extraPlugins = [cfg.package];
|
||||||
|
|
||||||
|
globals.rainbow_delimiters = with cfg;
|
||||||
|
{
|
||||||
|
strategy =
|
||||||
|
helpers.ifNonNull' strategy
|
||||||
|
(
|
||||||
|
mapAttrs'
|
||||||
|
(
|
||||||
|
name: value: {
|
||||||
|
name =
|
||||||
|
if name == "default"
|
||||||
|
then "__emptyString"
|
||||||
|
else name;
|
||||||
|
value =
|
||||||
|
if isString value
|
||||||
|
then helpers.mkRaw "require 'rainbow-delimiters'.strategy['${value}']"
|
||||||
|
else value;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
strategy
|
||||||
|
);
|
||||||
|
query =
|
||||||
|
helpers.ifNonNull' query
|
||||||
|
(
|
||||||
|
mapAttrs'
|
||||||
|
(
|
||||||
|
name: value: {
|
||||||
|
name =
|
||||||
|
if name == "default"
|
||||||
|
then "__emptyString"
|
||||||
|
else name;
|
||||||
|
inherit value;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
query
|
||||||
|
);
|
||||||
|
inherit
|
||||||
|
highlight
|
||||||
|
whitelist
|
||||||
|
blacklist
|
||||||
|
;
|
||||||
|
log = with log; {
|
||||||
|
inherit file;
|
||||||
|
level =
|
||||||
|
helpers.ifNonNull' level
|
||||||
|
(helpers.mkRaw "vim.log.levels.${strings.toUpper level}");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// cfg.extraOptions;
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,66 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
helpers = import ../../helpers.nix {inherit lib;};
|
|
||||||
in {
|
|
||||||
options.plugins.treesitter-rainbow =
|
|
||||||
helpers.extraOptionsOptions
|
|
||||||
// {
|
|
||||||
enable = mkEnableOption "treesitter-rainbow";
|
|
||||||
|
|
||||||
package = helpers.mkPackageOption "treesitter-rainbow" pkgs.vimPlugins.nvim-ts-rainbow2;
|
|
||||||
|
|
||||||
disable =
|
|
||||||
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]"
|
|
||||||
"List of languages you want to disable the plugin for.";
|
|
||||||
|
|
||||||
query =
|
|
||||||
helpers.defaultNullOpts.mkStr "rainbow-parens"
|
|
||||||
"The query to use for finding delimiters.";
|
|
||||||
|
|
||||||
strategy =
|
|
||||||
helpers.defaultNullOpts.mkStr "require('ts-rainbow').strategy.global"
|
|
||||||
"The query to use for finding delimiters. Directly provide lua code.";
|
|
||||||
|
|
||||||
hlgroups =
|
|
||||||
helpers.defaultNullOpts.mkNullable (types.listOf types.str)
|
|
||||||
''
|
|
||||||
[
|
|
||||||
"TSRainbowRed"
|
|
||||||
"TSRainbowYellow"
|
|
||||||
"TSRainbowBlue"
|
|
||||||
"TSRainbowOrange"
|
|
||||||
"TSRainbowGreen"
|
|
||||||
"TSRainbowViolet"
|
|
||||||
"TSRainbowCyan"
|
|
||||||
]
|
|
||||||
''
|
|
||||||
"The list of highlight groups to apply.";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = let
|
|
||||||
cfg = config.plugins.treesitter-rainbow;
|
|
||||||
in
|
|
||||||
mkIf cfg.enable {
|
|
||||||
warnings = mkIf (!config.plugins.treesitter.enable) [
|
|
||||||
"Nixvim: treesitter-rainbow needs treesitter to function as intended"
|
|
||||||
];
|
|
||||||
|
|
||||||
extraPlugins = [cfg.package];
|
|
||||||
|
|
||||||
plugins.treesitter.moduleConfig.rainbow =
|
|
||||||
{
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
inherit (cfg) disable;
|
|
||||||
inherit (cfg) query;
|
|
||||||
strategy = helpers.ifNonNull' cfg.strategy (helpers.mkRaw cfg.strategy);
|
|
||||||
inherit (cfg) hlgroups;
|
|
||||||
}
|
|
||||||
// cfg.extraOptions;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
{
|
||||||
|
empty = {
|
||||||
|
plugins = {
|
||||||
|
treesitter.enable = true;
|
||||||
|
rainbow-delimiters.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
example = {
|
||||||
|
plugins = {
|
||||||
|
treesitter.enable = true;
|
||||||
|
rainbow-delimiters = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
strategy = {
|
||||||
|
default = "global";
|
||||||
|
html = "local";
|
||||||
|
latex.__raw = ''
|
||||||
|
function()
|
||||||
|
-- Disabled for very large files, global strategy for large files,
|
||||||
|
-- local strategy otherwise
|
||||||
|
if vim.fn.line('$') > 10000 then
|
||||||
|
return nil
|
||||||
|
elseif vim.fn.line('$') > 1000 then
|
||||||
|
return rainbow.strategy['global']
|
||||||
|
end
|
||||||
|
return rainbow.strategy['local']
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
query = {
|
||||||
|
default = "rainbow-delimiters";
|
||||||
|
lua = "rainbow-blocks";
|
||||||
|
};
|
||||||
|
highlight = [
|
||||||
|
"RainbowDelimiterRed"
|
||||||
|
"RainbowDelimiterYellow"
|
||||||
|
"RainbowDelimiterBlue"
|
||||||
|
"RainbowDelimiterOrange"
|
||||||
|
"RainbowDelimiterGreen"
|
||||||
|
"RainbowDelimiterViolet"
|
||||||
|
"RainbowDelimiterCyan"
|
||||||
|
];
|
||||||
|
blacklist = ["c" "cpp"];
|
||||||
|
log = {
|
||||||
|
file.__raw = "vim.fn.stdpath('log') .. '/rainbow-delimiters.log'";
|
||||||
|
level = "warn";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
example-whitelist = {
|
||||||
|
plugins = {
|
||||||
|
treesitter.enable = true;
|
||||||
|
rainbow-delimiters = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
whitelist = ["c" "cpp"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,30 +0,0 @@
|
||||||
{pkgs}: {
|
|
||||||
empty = {
|
|
||||||
plugins = {
|
|
||||||
treesitter.enable = true;
|
|
||||||
treesitter-rainbow.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
default = {
|
|
||||||
plugins = {
|
|
||||||
treesitter.enable = true;
|
|
||||||
treesitter-rainbow = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
disable = [];
|
|
||||||
query = "rainbow-parens";
|
|
||||||
strategy = "require('ts-rainbow').strategy.global";
|
|
||||||
hlgroups = [
|
|
||||||
"TSRainbowRed"
|
|
||||||
"TSRainbowYellow"
|
|
||||||
"TSRainbowBlue"
|
|
||||||
"TSRainbowOrange"
|
|
||||||
"TSRainbowGreen"
|
|
||||||
"TSRainbowViolet"
|
|
||||||
"TSRainbowCyan"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Add table
Add a link
Reference in a new issue