diff --git a/plugins/by-name/treesitter-refactor/default.nix b/plugins/by-name/treesitter-refactor/default.nix index 118332cf..2f8d575a 100644 --- a/plugins/by-name/treesitter-refactor/default.nix +++ b/plugins/by-name/treesitter-refactor/default.nix @@ -1,144 +1,48 @@ -{ - lib, - config, - pkgs, - ... -}: -with lib; -{ - options.plugins.treesitter-refactor = - let - disable = mkOption { - type = types.listOf types.str; - default = [ ]; - description = "List of languages to disable the module on"; - }; - in - { - enable = mkEnableOption "treesitter-refactor (requires plugins.treesitter.enable to be true)"; +{ lib, config, ... }: +lib.nixvim.plugins.mkNeovimPlugin { + name = "treesitter-refactor"; + package = "nvim-treesitter-refactor"; + maintainers = [ lib.maintainers.GaetanLepage ]; - package = lib.mkPackageOption pkgs "treesitter-refactor" { - default = [ - "vimPlugins" - "nvim-treesitter-refactor" - ]; - }; + # TODO: introduced 2025-10-17: remove after 26.05 + optionsRenamedToSettings = lib.map (lib.splitString ".") [ + "highlightDefinitions.enable" + "highlightDefinitions.disable" + "highlightDefinitions.clearOnCursorMove" - highlightDefinitions = { - inherit disable; - enable = mkEnableOption "Highlights definition and usages of the current symbol under the cursor."; - clearOnCursorMove = mkOption { - type = types.bool; - default = true; - description = '' - Controls if highlights should be cleared when the cursor is moved. If your 'updatetime' - is around `100` you can set this to false to have a less laggy experience. - ''; - }; - }; - highlightCurrentScope = { - inherit disable; - enable = mkEnableOption "highlighting the block from the current scope where the cursor is"; - }; - smartRename = { - inherit disable; - enable = mkEnableOption "Renames the symbol under the cursor within the current scope (and current file)."; - keymaps = { - smartRename = mkOption { - type = types.nullOr types.str; - default = "grr"; - description = "rename symbol under the cursor"; - }; - }; - }; - navigation = { - inherit disable; - enable = mkEnableOption '' - Provides "go to definition" for the symbol under the cursor, - and lists the definitions from the current file. - ''; + "highlightCurrentScope.disable" + "highlightCurrentScope.enable" - keymaps = { - gotoDefinition = mkOption { - type = types.nullOr types.str; - default = "gnd"; - description = "go to the definition of the symbol under the cursor"; - }; - gotoDefinitionLspFallback = mkOption { - type = types.nullOr types.str; - default = null; - description = '' - go to the definition of the symbol under the cursor or use vim.lsp.buf.definition if - the symbol can not be resolved. You can use your own fallback function if create a - mapping for `lua require'nvim-treesitter.refactor.navigation(nil, fallback_function)`. - ''; - }; - listDefinitions = mkOption { - type = types.nullOr types.str; - default = "gnD"; - description = "list all definitions from the current file"; - }; - listDefinitionsToc = mkOption { - type = types.nullOr types.str; - default = "gO"; - description = '' - list all definitions from the current file like a table of contents (similar to the one - you see when pressing |gO| in help files). - ''; - }; - gotoNextUsage = mkOption { - type = types.nullOr types.str; - default = ""; - description = "go to next usage of identifier under the cursor"; - }; - gotoPreviousUsage = mkOption { - type = types.nullOr types.str; - default = ""; - description = "go to previous usage of identifier"; - }; - }; - }; + "smartRename.enable" + "smartRename.disable" + "smartRename.keymaps.smartRename" + + "navigation.enable" + "navigation.disable" + "navigation.keymaps.gotoDefinition" + "navigation.keymaps.gotoDefinitionLspFallback" + "navigation.keymaps.listDefinitions" + "navigation.keymaps.listDefinitionsToc" + "navigation.keymaps.gotoNextUsage" + "navigation.keymaps.gotoPreviousUsage" + ]; + + settingsExample = { + smart_rename = { + enable = true; + keymaps.smart_rename = "grr"; + }; + }; + + callSetup = false; + hasLuaConfig = false; + settingsDescription = "Options provided to `plugins.treesitter.settings.textobjects`."; + extraConfig = cfg: { + warnings = lib.nixvim.mkWarnings "plugins.treesitter-refactor" { + when = !config.plugins.treesitter.enable; + message = "This plugin needs treesitter to function as intended."; }; - config = - let - cfg = config.plugins.treesitter-refactor; - in - mkIf cfg.enable { - warnings = lib.nixvim.mkWarnings "plugins.treesitter-refactor" { - when = !config.plugins.treesitter.enable; - message = "This plugin needs treesitter to function as intended."; - }; - - extraPlugins = [ cfg.package ]; - - plugins.treesitter.settings.refactor = { - highlight_definitions = { - inherit (cfg.highlightDefinitions) enable disable; - clear_on_cursor_move = cfg.highlightDefinitions.clearOnCursorMove; - }; - highlight_current_scope = cfg.highlightCurrentScope; - smart_rename = { - inherit (cfg.smartRename) enable disable; - keymaps = { - smart_rename = cfg.smartRename.keymaps.smartRename; - }; - }; - navigation = { - inherit (cfg.navigation) enable disable; - keymaps = - let - cfgK = cfg.navigation.keymaps; - in - { - goto_definition = cfgK.gotoDefinition; - goto_definition_lsp_fallback = cfgK.gotoDefinitionLspFallback; - list_definitions = cfgK.listDefinitions; - list_definitions_toc = cfgK.listDefinitionsToc; - goto_next_usage = cfgK.gotoNextUsage; - goto_previous_usage = cfgK.gotoPreviousUsage; - }; - }; - }; - }; + plugins.treesitter.settings.refactor = cfg.settings; + }; } diff --git a/tests/test-sources/plugins/by-name/treesitter-refactor/default.nix b/tests/test-sources/plugins/by-name/treesitter-refactor/default.nix index 5ac19c30..e4421c71 100644 --- a/tests/test-sources/plugins/by-name/treesitter-refactor/default.nix +++ b/tests/test-sources/plugins/by-name/treesitter-refactor/default.nix @@ -1,9 +1,24 @@ { empty = { plugins = { - treesitter-refactor.enable = true; - # Also needs treesitter, to avoid warnings treesitter.enable = true; + treesitter-refactor.enable = true; + }; + }; + + example = { + plugins = { + treesitter.enable = true; + treesitter-refactor = { + enable = true; + + settings = { + smart_rename = { + enable = true; + keymaps.smart_rename = "grr"; + }; + }; + }; }; }; }