From 30726d49c6db1a7b8d441abb6c626cb9934bead7 Mon Sep 17 00:00:00 2001 From: Felix Hilgers Date: Wed, 5 Apr 2023 13:34:20 +0200 Subject: [PATCH] plugins/treesitter-playground: init + tests (#311) --- plugins/default.nix | 1 + plugins/languages/treesitter-playground.nix | 67 +++++++++++++++++++ .../languages/treesitter-playground.nix | 29 ++++++++ 3 files changed, 97 insertions(+) create mode 100644 plugins/languages/treesitter-playground.nix create mode 100644 tests/test-sources/plugins/languages/treesitter-playground.nix diff --git a/plugins/default.nix b/plugins/default.nix index 7daf7608..10c22713 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -38,6 +38,7 @@ ./languages/tagbar.nix ./languages/treesitter.nix ./languages/treesitter-context.nix + ./languages/treesitter-playground.nix ./languages/treesitter-refactor.nix ./languages/vimtex.nix ./languages/zig.nix diff --git a/plugins/languages/treesitter-playground.nix b/plugins/languages/treesitter-playground.nix new file mode 100644 index 00000000..7882b43d --- /dev/null +++ b/plugins/languages/treesitter-playground.nix @@ -0,0 +1,67 @@ +{ + pkgs, + lib, + config, + ... +}: +with lib; let + helpers = import ../helpers.nix {inherit lib;}; + + inherit (helpers) mkPackageOption mkCompositeOption; + inherit (helpers.defaultNullOpts) mkInt mkBool mkStr mkNullable; +in { + options.plugins.treesitter-playground = { + enable = mkEnableOption "nvim-treesitter-playground"; + + package = mkPackageOption "treesitter-playground" pkgs.vimPlugins.playground; + + disabledLanguages = mkNullable (types.listOf types.str) "[]" "A list of languages where this module should be disabled"; + + updateTime = mkInt 25 "Debounced time for highlighting nodes in the playground from source code"; + + persistQueries = mkBool false "Whether the query persists across vim sessions"; + + keybindings = mkCompositeOption "Keybindings inside the Playground" { + toggleQueryEditor = mkStr "o" "Toggle query editor"; + toggleHlGroups = mkStr "i" "Toggle highlight groups"; + toggleInjectedLanguages = mkStr "t" "Toggle injected languages"; + toggleAnonymousNodes = mkStr "a" "Toggle anonymous nodes"; + toggleLanguageDisplay = mkStr "I" "Toggle language display"; + focusLanguage = mkStr "f" "Focus language"; + unfocusLanguage = mkStr "F" "Unfocus language"; + update = mkStr "R" "Update"; + gotoNode = mkStr "" "Go to node"; + showHelp = mkStr "?" "Show help"; + }; + }; + + config = let + cfg = config.plugins.treesitter-playground; + in + mkIf cfg.enable { + warnings = mkIf (!config.plugins.treesitter.enable) [ + "Nixvim: treesitter-playground needs treesitter to function as intended" + ]; + + extraPlugins = [cfg.package]; + + plugins.treesitter.moduleConfig.playground = { + enable = true; + disable = cfg.disabledLanguages; + updatetime = cfg.updateTime; + persist_queries = cfg.persistQueries; + keybindings = helpers.ifNonNull' cfg.keybindings { + toggle_query_editor = cfg.keybindings.toggleQueryEditor; + toggle_hl_groups = cfg.keybindings.toggleHlGroups; + toggle_injected_languages = cfg.keybindings.toggleInjectedLanguages; + toggle_anonymous_nodes = cfg.keybindings.toggleAnonymousNodes; + toggle_language_display = cfg.keybindings.toggleLanguageDisplay; + focus_language = cfg.keybindings.focusLanguage; + unfocus_language = cfg.keybindings.unfocusLanguage; + update = cfg.keybindings.update; + goto_node = cfg.keybindings.gotoNode; + show_help = cfg.keybindings.showHelp; + }; + }; + }; +} diff --git a/tests/test-sources/plugins/languages/treesitter-playground.nix b/tests/test-sources/plugins/languages/treesitter-playground.nix new file mode 100644 index 00000000..b9879c50 --- /dev/null +++ b/tests/test-sources/plugins/languages/treesitter-playground.nix @@ -0,0 +1,29 @@ +{pkgs}: { + empty = { + plugins.treesitter.enable = true; + plugins.treesitter-playground.enable = true; + }; + + default = { + plugins.treesitter.enable = true; + plugins.treesitter-playground = { + enable = true; + + disabledLanguages = []; + updateTime = 25; + persistQueries = false; + keybindings = { + toggleQueryEditor = "o"; + toggleHlGroups = "i"; + toggleInjectedLanguages = "t"; + toggleAnonymousNodes = "a"; + toggleLanguageDisplay = "I"; + focusLanguage = "f"; + unfocusLanguage = "F"; + update = "R"; + gotoNode = ""; + showHelp = "?"; + }; + }; + }; +}