From 7cd4a44462e5f8a53c30c93475b4634b6628069d Mon Sep 17 00:00:00 2001 From: Alexander Nortung Date: Tue, 17 Jan 2023 21:50:22 +0100 Subject: [PATCH] treesitter-refactor: package option + formatting --- plugins/languages/treesitter-refactor.nix | 216 ++++++++++++---------- 1 file changed, 114 insertions(+), 102 deletions(-) diff --git a/plugins/languages/treesitter-refactor.nix b/plugins/languages/treesitter-refactor.nix index 56b768a3..94bd986e 100644 --- a/plugins/languages/treesitter-refactor.nix +++ b/plugins/languages/treesitter-refactor.nix @@ -1,105 +1,115 @@ -{ - pkgs, - config, - lib, - ... +{ pkgs +, config +, lib +, ... }: 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 - "Enable treesitter-refactor (requires plugins.treesitter.enable to be true)"; - highlightDefinitions = { - inherit disable; + 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 - "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. + "Enable treesitter-refactor (requires plugins.treesitter.enable to be true)"; + + package = mkOption { + type = types.package; + default = pkgs.vimPlugins.nvim-treesitter-refactor; + description = "Plugin to use for treesitter-refactor"; + }; + + 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 "Highlights 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 = { - inherit disable; - enable = mkEnableOption "Highlights 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. - ''; - 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 fo `lua require'nvim-treesitter.refactor.navigation(nil, fallback_function)`. - ''; - }; - listDefinitons = mkOption { - type = types.nullOr types.str; - default = "gnD"; - description = "list all definitions from the current file"; - }; - listDefinitonsToc = 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"; + 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 fo `lua require'nvim-treesitter.refactor.navigation(nil, fallback_function)`. + ''; + }; + listDefinitons = mkOption { + type = types.nullOr types.str; + default = "gnD"; + description = "list all definitions from the current file"; + }; + listDefinitonsToc = 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"; + }; }; }; }; - }; - config = let - cfg = config.plugins.treesitter-refactor; - in + config = + let + cfg = config.plugins.treesitter-refactor; + in mkIf cfg.enable { - extraPlugins = with pkgs.vimPlugins; [nvim-treesitter-refactor]; + extraPlugins = [ cfg.package ]; + plugins.treesitter.moduleConfig.refactor = { highlight_definitions = { inherit (cfg.highlightDefinitions) enable disable; @@ -108,20 +118,22 @@ with lib; { highlight_current_scope = cfg.highlightCurrentScope; smart_rename = { inherit (cfg.smartRename) enable disable; - keymaps = {smart_rename = cfg.smartRename.keymaps.smartRename;}; + 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.listDefinitons; - list_definitions_toc = cfgK.listDefinitonsToc; - goto_next_usage = cfgK.gotoNextUsage; - goto_previous_usage = cfgK.gotoPreviousUsage; - }; + keymaps = + let + cfgK = cfg.navigation.keymaps; + in + { + goto_definition = cfgK.gotoDefinition; + goto_definition_lsp_fallback = cfgK.gotoDefinitionLspFallback; + list_definitions = cfgK.listDefinitons; + list_definitions_toc = cfgK.listDefinitonsToc; + goto_next_usage = cfgK.gotoNextUsage; + goto_previous_usage = cfgK.gotoPreviousUsage; + }; }; }; };