{ lib, helpers, config, pkgs, ... }: with lib; helpers.neovim-plugin.mkNeovimPlugin config { name = "comment"; originalName = "Comment.nvim"; luaName = "Comment"; defaultPackage = pkgs.vimPlugins.comment-nvim; maintainers = [ maintainers.GaetanLepage ]; # TODO introduced 2024-03-24: remove 2024-05-24 imports = let oldPluginPath = [ "plugins" "comment-nvim" ]; newPluginPath = [ "plugins" "comment" ]; settingsPath = newPluginPath ++ [ "settings" ]; in [ (mkRenamedOptionModule (oldPluginPath ++ [ "enable" ]) (newPluginPath ++ [ "enable" ])) (mkRenamedOptionModule (oldPluginPath ++ [ "package" ]) (newPluginPath ++ [ "package" ])) (mkRenamedOptionModule (oldPluginPath ++ [ "padding" ]) (settingsPath ++ [ "padding" ])) (mkRenamedOptionModule (oldPluginPath ++ [ "sticky" ]) (settingsPath ++ [ "sticky" ])) (mkRenamedOptionModule (oldPluginPath ++ [ "ignore" ]) (settingsPath ++ [ "ignore" ])) (mkRenamedOptionModule ( oldPluginPath ++ [ "toggler" "line" ] ) ( settingsPath ++ [ "toggler" "line" ] ) ) (mkRenamedOptionModule ( oldPluginPath ++ [ "toggler" "block" ] ) ( settingsPath ++ [ "toggler" "block" ] ) ) (mkRenamedOptionModule ( oldPluginPath ++ [ "opleader" "line" ] ) ( settingsPath ++ [ "opleader" "line" ] ) ) (mkRenamedOptionModule ( oldPluginPath ++ [ "opleader" "block" ] ) ( settingsPath ++ [ "opleader" "block" ] ) ) (mkRenamedOptionModule ( oldPluginPath ++ [ "mappings" "basic" ] ) ( settingsPath ++ [ "mappings" "basic" ] ) ) (mkRenamedOptionModule ( oldPluginPath ++ [ "mappings" "extra" ] ) ( settingsPath ++ [ "mappings" "extra" ] ) ) (mkRemovedOptionModule ( oldPluginPath ++ [ "mappings" "extended" ] ) "This option has been removed upstream.") (mkRenamedOptionModule (oldPluginPath ++ [ "preHook" ]) (settingsPath ++ [ "pre_hook" ])) (mkRenamedOptionModule (oldPluginPath ++ [ "postHook" ]) (settingsPath ++ [ "post_hook" ])) ]; settingsOptions = { padding = helpers.defaultNullOpts.mkBool true '' Add a space b/w comment and the line. ''; sticky = helpers.defaultNullOpts.mkBool true '' Whether the cursor should stay at its position. ''; ignore = helpers.mkNullOrStr '' Lines to be ignored while (un)comment. ''; toggler = { line = helpers.defaultNullOpts.mkStr "gcc" '' Line-comment toggle keymap in NORMAL mode. ''; block = helpers.defaultNullOpts.mkStr "gbc" '' Block-comment toggle keymap in NORMAL mode. ''; }; opleader = { line = helpers.defaultNullOpts.mkStr "gc" '' Line-comment operator-pending keymap in NORMAL and VISUAL mode. ''; block = helpers.defaultNullOpts.mkStr "gb" '' Block-comment operator-pending keymap in NORMAL and VISUAL mode. ''; }; extra = { above = helpers.defaultNullOpts.mkStr "gcO" '' Add comment on the line above. ''; below = helpers.defaultNullOpts.mkStr "gco" '' Add comment on the line below. ''; eol = helpers.defaultNullOpts.mkStr "gcA" '' Add comment at the end of line. ''; }; mappings = helpers.defaultNullOpts.mkNullable ( with types; either (enum [ false ]) (submodule { options = { basic = helpers.defaultNullOpts.mkBool true '' Enable operator-pending mappings (`gcc`, `gbc`, `gc[count]{motion}`, `gb[count]{motion}`). ''; extra = helpers.defaultNullOpts.mkBool true '' Enable extra mappings (`gco`, `gcO`, `gcA`). ''; }; }) ) '' { basic = true; extra = true; } '' '' Enables keybindings. NOTE: If given 'false', then the plugin won't create any mappings. ''; pre_hook = helpers.mkNullOrLuaFn '' Lua function called before (un)comment. ''; post_hook = helpers.mkNullOrLuaFn '' Lua function called after (un)comment. ''; }; settingsExample = { ignore = "^const(.*)=(%s?)%((.*)%)(%s?)=>"; toggler = { line = "gcc"; block = "gbc"; }; opleader = { line = "gc"; block = "gb"; }; pre_hook = "require('ts_context_commentstring.integrations.comment_nvim').create_pre_hook()"; post_hook = '' function(ctx) if ctx.range.srow == ctx.range.erow then -- do something with the current line else -- do something with lines range end end ''; }; }