From ab3a8a28402574ee03fc104cb1db145b334b9c88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Reynier?= Date: Sat, 16 Mar 2024 15:30:02 +0000 Subject: [PATCH] plugins/trouble: switch to settingsOptions --- plugins/lsp/trouble.nix | 432 +++++++++++---------- tests/test-sources/plugins/lsp/trouble.nix | 87 +++-- 2 files changed, 264 insertions(+), 255 deletions(-) diff --git a/plugins/lsp/trouble.nix b/plugins/lsp/trouble.nix index 81ed2dac..649e6c46 100644 --- a/plugins/lsp/trouble.nix +++ b/plugins/lsp/trouble.nix @@ -4,224 +4,232 @@ config, pkgs, ... -}: let - cfg = config.plugins.trouble; -in - with lib; { - options.plugins.trouble = - helpers.neovim-plugin.extraOptionsOptions - // { - enable = mkEnableOption "trouble.nvim"; +}: +with lib; + helpers.neovim-plugin.mkNeovimPlugin config { + name = "trouble"; + originalName = "trouble-nvim"; + defaultPackage = pkgs.vimPlugins.trouble-nvim; - package = helpers.mkPackageOption "trouble-nvim" pkgs.vimPlugins.trouble-nvim; + extraPlugins = with pkgs.vimPlugins; [ + nvim-web-devicons + ]; - position = helpers.defaultNullOpts.mkEnum ["top" "left" "right" "bottom"] "bottom" '' - Position of the list - ''; + maintainers = [maintainers.loicreynier]; - height = helpers.defaultNullOpts.mkInt 10 '' - Height of the trouble list when position is top or bottom - ''; + # TODO introduced 2024-03-15: remove 2024-05-15 + optionsRenamedToSettings = [ + "autoClose" + "autoFold" + "autoOpen" + "autoJump" + "autoPreview" + "foldClosed" + "foldOpen" + "group" + "height" + "icons" + "indentLines" + "mode" + "padding" + "position" + "width" + "useDiagnosticSigns" - width = helpers.defaultNullOpts.mkInt 50 "Width of the list when position is left or right"; + ["actionKeys" "cancel"] + ["actionKeys" "close"] + ["actionKeys" "closeFolds"] + ["actionKeys" "hover"] + ["actionKeys" "jump"] + ["actionKeys" "jumpClose"] + ["actionKeys" "next"] + ["actionKeys" "openFolds"] + ["actionKeys" "openSplit"] + ["actionKeys" "openTab"] + ["actionKeys" "openVsplit"] + ["actionKeys" "previous"] + ["actionKeys" "refresh"] + ["actionKeys" "toggleFold"] + ["actionKeys" "toggleMode"] + ["actionKeys" "togglePreview"] + ["signs" "error"] + ["signs" "hint"] + ["signs" "other"] + ["signs" "warning"] + ]; - icons = helpers.defaultNullOpts.mkBool true "Use devicons for filenames"; - - mode = - helpers.defaultNullOpts.mkEnum - [ - "workspace_diagnostics" - "document_diagnostics" - "quickfix" - "lsp_references" - "loclist" - ] - "workspace_diagnostics" - "Use devicons for filenames"; - - foldOpen = helpers.defaultNullOpts.mkStr "" "Icon used for open folds"; - - foldClosed = helpers.defaultNullOpts.mkStr "" "Icon used for closed folds"; - - group = helpers.defaultNullOpts.mkBool true "Group results by file"; - - padding = helpers.defaultNullOpts.mkBool true "Add an extra new line on top of the list"; - - actionKeys = - mapAttrs - ( - action: config: - helpers.defaultNullOpts.mkNullable - (with types; either str (listOf str)) - config.default - config.description - ) - { - close = { - default = "q"; - description = "Close the list"; - }; - cancel = { - default = ""; - description = "Cancel the preview and get back to your last window / buffer / cursor"; - }; - refresh = { - default = "r"; - description = "Manually refresh"; - }; - jump = { - default = "[ \"\" \"\" ]"; - description = "Jump to the diagnostic or open / close folds"; - }; - openSplit = { - default = "[ \"\" ]"; - description = "Open buffer in new split"; - }; - openVsplit = { - default = "[ \"\" ]"; - description = "Open buffer in new vsplit"; - }; - openTab = { - default = "[ \"\" ]"; - description = "Open buffer in new tab"; - }; - jumpClose = { - default = "[ \"o\" ]"; - description = "Jump to the diagnostic and close the list"; - }; - toggleMode = { - default = "m"; - description = "toggle between 'workspace' and 'document' diagnostics mode"; - }; - togglePreview = { - default = "P"; - description = "Toggle auto_preview"; - }; - hover = { - default = "K"; - description = "Opens a small popup with the full multiline message"; - }; - preview = { - default = "p"; - description = "Preview the diagnostic location"; - }; - closeFolds = { - default = "[ \"zM\" \"zm\" ]"; - description = "Close all folds"; - }; - openFolds = { - default = "[ \"zR\" \"zr\" ]"; - description = "Open all folds"; - }; - toggleFold = { - default = "[ \"zA\" \"za\" ]"; - description = "Toggle fold of current file"; - }; - previous = { - default = "k"; - description = "Previous item"; - }; - next = { - default = "j"; - description = "Next item"; - }; - }; - - indentLines = helpers.defaultNullOpts.mkBool true '' - Add an indent guide below the fold icons. - ''; - - autoOpen = helpers.defaultNullOpts.mkBool false '' - Automatically open the list when you have diagnostics. - ''; - - autoClose = helpers.defaultNullOpts.mkBool false '' - Automatically close the list when you have no diagnostics. - ''; - - autoPreview = helpers.defaultNullOpts.mkBool true '' - Automatically preview the location of the diagnostic. - to close preview and go back to last window. - ''; - - autoFold = helpers.defaultNullOpts.mkBool false '' - Automatically fold a file trouble list at creation. - ''; - - autoJump = - helpers.defaultNullOpts.mkNullable - (types.listOf types.str) - "[ \"lsp_definitions\" ]" - "For the given modes, automatically jump if there is only a single result."; - - signs = - mapAttrs - ( - diagnostic: default: - helpers.defaultNullOpts.mkStr default "Icon/text for ${diagnostic} diagnostics." - ) - { - error = ""; - warning = ""; - hint = ""; - information = ""; - other = "﫠"; - }; - - useDiagnosticSigns = helpers.defaultNullOpts.mkBool false '' - Enabling this will use the signs defined in your lsp client - ''; - }; - - config = mkIf cfg.enable { - extraConfigLua = let - options = - { - inherit - (cfg) - position - height - width - icons - mode - ; - fold_open = cfg.foldOpen; - fold_closed = cfg.foldClosed; - inherit (cfg) group padding; - indent_lines = cfg.indentLines; - auto_open = cfg.autoOpen; - auto_close = cfg.autoClose; - auto_preview = cfg.autoPreview; - auto_fold = cfg.autoFold; - auto_jump = cfg.autoJump; - inherit (cfg) signs; - action_keys = with cfg.actionKeys; { - inherit close cancel refresh jump; - open_split = openSplit; - open_vsplit = openVsplit; - open_tab = openTab; - jump_close = jumpClose; - toggle_mode = toggleMode; - toggle_preview = togglePreview; - inherit - hover - preview - ; - close_folds = closeFolds; - open_folds = openFolds; - toggle_fold = toggleFold; - inherit next; - }; - use_diagnostic_signs = cfg.useDiagnosticSigns; - } - // cfg.extraOptions; - in '' - require('trouble').setup(${helpers.toLuaObject options}) + settingsOptions = { + position = helpers.defaultNullOpts.mkEnum ["top" "left" "right" "bottom"] "bottom" '' + Position of the list. ''; - extraPlugins = with pkgs.vimPlugins; [ - cfg.package - nvim-web-devicons - ]; + height = helpers.defaultNullOpts.mkInt 10 '' + Height of the trouble list when position is top or bottom. + ''; + + width = helpers.defaultNullOpts.mkInt 50 '' + Width of the list when position is left or right. + ''; + + icons = helpers.defaultNullOpts.mkBool true "Use devicons for filenames"; + + mode = + helpers.defaultNullOpts.mkEnum + [ + "workspace_diagnostics" + "document_diagnostics" + "quickfix" + "lsp_references" + "loclist" + ] + "workspace_diagnostics" + "Mode for default list"; + + fold_open = helpers.defaultNullOpts.mkStr "" "Icon used for open folds"; + + fold_closed = helpers.defaultNullOpts.mkStr "" "Icon used for closed folds"; + + group = helpers.defaultNullOpts.mkBool true "Group results by file"; + + padding = helpers.defaultNullOpts.mkBool true "Add an extra new line on top of the list"; + + cycle_results = helpers.defaultNullOpts.mkBool true "Whether to cycle item list when reaching beginning or end of list"; + + action_keys = + mapAttrs + ( + action: config: + helpers.defaultNullOpts.mkNullable + (with types; either str (listOf str)) + config.default + config.description + ) + { + close = { + default = "q"; + description = "Close the list"; + }; + cancel = { + default = ""; + description = "Cancel the preview and get back to your last window / buffer / cursor"; + }; + refresh = { + default = "r"; + description = "Manually refresh"; + }; + jump = { + default = "[ \"\" \"\" ]"; + description = "Jump to the diagnostic or open / close folds"; + }; + open_split = { + default = "[ \"\" ]"; + description = "Open buffer in new split"; + }; + open_vsplit = { + default = "[ \"\" ]"; + description = "Open buffer in new vsplit"; + }; + open_tab = { + default = "[ \"\" ]"; + description = "Open buffer in new tab"; + }; + jump_close = { + default = "[ \"o\" ]"; + description = "Jump to the diagnostic and close the list"; + }; + toggle_mode = { + default = "m"; + description = "toggle between 'workspace' and 'document' diagnostics mode"; + }; + toggle_preview = { + default = "P"; + description = "Toggle auto_preview"; + }; + hover = { + default = "K"; + description = "Opens a small popup with the full multiline message"; + }; + preview = { + default = "p"; + description = "Preview the diagnostic location"; + }; + close_folds = { + default = "[ \"zM\" \"zm\" ]"; + description = "Close all folds"; + }; + open_folds = { + default = "[ \"zR\" \"zr\" ]"; + description = "Open all folds"; + }; + toggle_fold = { + default = "[ \"zA\" \"za\" ]"; + description = "Toggle fold of current file"; + }; + previous = { + default = "k"; + description = "Previous item"; + }; + next = { + default = "j"; + description = "Next item"; + }; + }; + + indent_lines = helpers.defaultNullOpts.mkBool true '' + Add an indent guide below the fold icons. + ''; + + win_config = + helpers.defaultNullOpts.mkAttrsOf types.anything + '' + { + border = "single"; + } + '' + "Configuration for floating windows. See `|nvim_open_win()|`."; + + auto_open = helpers.defaultNullOpts.mkBool false '' + Automatically open the list when you have diagnostics. + ''; + + auto_close = helpers.defaultNullOpts.mkBool false '' + Automatically close the list when you have no diagnostics. + ''; + + auto_preview = helpers.defaultNullOpts.mkBool true '' + Automatically preview the location of the diagnostic. + to close preview and go back to last window. + ''; + + auto_fold = helpers.defaultNullOpts.mkBool false '' + Automatically fold a file trouble list at creation. + ''; + + auto_jump = helpers.defaultNullOpts.mkListOf types.str ''["lsp_definitions"]'' '' + For the given modes, automatically jump if there is only a single result. + ''; + + include_declaration = + helpers.defaultNullOpts.mkListOf types.str + ''["lsp_references" "lsp_implementations" "lsp_definitions"]'' + "For the given modes, include the declaration of the current symbol in the results."; + + signs = + mapAttrs + ( + diagnostic: default: + helpers.defaultNullOpts.mkStr default "Icon/text for ${diagnostic} diagnostics." + ) + { + error = ""; + warning = ""; + hint = ""; + information = ""; + other = "﫠"; + }; + + use_diagnostic_signs = helpers.defaultNullOpts.mkBool false '' + Enabling this will use the signs defined in your lsp client + ''; }; } diff --git a/tests/test-sources/plugins/lsp/trouble.nix b/tests/test-sources/plugins/lsp/trouble.nix index 507588d9..16e038e5 100644 --- a/tests/test-sources/plugins/lsp/trouble.nix +++ b/tests/test-sources/plugins/lsp/trouble.nix @@ -1,5 +1,4 @@ { - # Empty configuration empty = { plugins.trouble.enable = true; }; @@ -13,53 +12,55 @@ plugins.trouble.enable = true; }; - # All the upstream default options of trouble defaults = { plugins.trouble = { enable = true; - position = "bottom"; - height = 10; - width = 50; - icons = true; - mode = "workspace_diagnostics"; - foldOpen = ""; - foldClosed = ""; - group = true; - padding = true; - actionKeys = { - close = "q"; - cancel = ""; - refresh = "r"; - jump = ["" ""]; - openSplit = [""]; - openVsplit = [""]; - openTab = [""]; - jumpClose = ["o"]; - toggleMode = "m"; - togglePreview = "P"; - hover = "K"; - preview = "p"; - closeFolds = ["zM" "zm"]; - openFolds = ["zR" "zr"]; - toggleFold = ["zA" "za"]; - previous = "k"; - next = "j"; + settings = { + position = "bottom"; + height = 10; + width = 50; + icons = true; + mode = "workspace_diagnostics"; + fold_open = ""; + fold_closed = ""; + group = true; + padding = true; + action_keys = { + close = "q"; + cancel = ""; + refresh = "r"; + jump = ["" ""]; + open_split = [""]; + open_vsplit = [""]; + open_tab = [""]; + jump_close = ["o"]; + toggle_mode = "m"; + toggle_preview = "P"; + hover = "K"; + preview = "p"; + close_folds = ["zM" "zm"]; + open_folds = ["zR" "zr"]; + toggle_fold = ["zA" "za"]; + previous = "k"; + next = "j"; + }; + indent_lines = true; + win_config = {border = "single";}; + auto_open = false; + auto_close = false; + auto_preview = true; + auto_fold = false; + auto_jump = ["lsp_definitions"]; + signs = { + error = ""; + warning = ""; + hint = ""; + information = ""; + other = "﫠"; + }; + use_diagnostic_signs = false; }; - indentLines = true; - autoOpen = false; - autoClose = false; - autoPreview = true; - autoFold = false; - autoJump = ["lsp_definitions"]; - signs = { - error = ""; - warning = ""; - hint = ""; - information = ""; - other = "﫠"; - }; - useDiagnosticSigns = false; }; }; }