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/sniprun.nix
|
||||
./languages/tagbar.nix
|
||||
./languages/treesitter/rainbow-delimiters.nix
|
||||
./languages/treesitter/treesitter.nix
|
||||
./languages/treesitter/treesitter-context.nix
|
||||
./languages/treesitter/treesitter-playground.nix
|
||||
./languages/treesitter/treesitter-rainbow.nix
|
||||
./languages/treesitter/treesitter-refactor.nix
|
||||
./languages/treesitter/ts-autotag.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