From a70168e0faa9648a8ac7785fd4f422aeff770617 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Sun, 26 Jan 2025 14:50:43 -0600 Subject: [PATCH] plugins/dap-python: migrate to mkNeovimPlugin --- plugins/by-name/dap-python/default.nix | 103 ++++++++++++++++++ plugins/by-name/dap-python/deprecations.nix | 41 +++++++ plugins/by-name/dap/dap-python.nix | 103 ------------------ plugins/by-name/dap/default.nix | 1 - .../dap-python.nix => dap-python/default.nix} | 12 +- 5 files changed, 151 insertions(+), 109 deletions(-) create mode 100644 plugins/by-name/dap-python/default.nix create mode 100644 plugins/by-name/dap-python/deprecations.nix delete mode 100644 plugins/by-name/dap/dap-python.nix rename tests/test-sources/plugins/by-name/{dap/dap-python.nix => dap-python/default.nix} (80%) diff --git a/plugins/by-name/dap-python/default.nix b/plugins/by-name/dap-python/default.nix new file mode 100644 index 00000000..912ac02d --- /dev/null +++ b/plugins/by-name/dap-python/default.nix @@ -0,0 +1,103 @@ +{ + lib, + pkgs, + ... +}: +let + inherit (lib) + optionalString + types + ; + inherit (lib.nixvim) + defaultNullOpts + mkNullOrOption + toLuaObject + ; + + dapHelpers = import ../dap/dapHelpers.nix { inherit lib; }; +in +lib.nixvim.plugins.mkNeovimPlugin { + name = "dap-python"; + package = "nvim-dap-python"; + + maintainers = [ lib.maintainers.khaneliman ]; + + extraOptions = { + adapterPythonPath = lib.mkOption { + default = lib.getExe (pkgs.python3.withPackages (ps: [ ps.debugpy ])); + defaultText = lib.literalExpression '' + lib.getExe (pkgs.python3.withPackages (ps: [ ps.debugpy ])) + ''; + description = '' + Path to the python interpreter. + Path must be absolute or in $PATH and needs to have the `debugpy` package installed. + ''; + type = types.str; + }; + + customConfigurations = mkNullOrOption (types.listOf dapHelpers.configurationOption) "Custom python configurations for dap."; + + resolvePython = defaultNullOpts.mkLuaFn null '' + Function to resolve path to python to use for program or test execution. + By default the `VIRTUAL_ENV` and `CONDA_PREFIX` environment variables are used if present. + ''; + + testRunner = defaultNullOpts.mkLuaFn' { + description = "The name of test runner to use by default."; + pluginDefault = lib.literalMD '' + The default value is dynamic and depends on `pytest.ini` or `manage.py` markers. + If neither are found, `"unittest"` is used. + ''; + }; + + testRunners = mkNullOrOption (with lib.types; attrsOf strLuaFn) '' + Set to register test runners. + + Built-in test runners include: `unittest`, `pytest` and `django`. + + The key is the test runner name, the value a function to generate the + module name to run and its arguments. + + See `|dap-python.TestRunner|`. + ''; + }; + + settingsOptions = { + console = defaultNullOpts.mkEnumFirstDefault [ + "integratedTerminal" + "internalConsole" + "externalTerminal" + ] "Debugpy console."; + + includeConfigs = defaultNullOpts.mkBool true "Add default configurations."; + }; + + # Manually supplied to nvim-dap config module + callSetup = false; + extraConfig = cfg: { + plugins.dap = { + enable = true; + + extensionConfigLua = + '' + require("dap-python").setup("${cfg.adapterPythonPath}", ${toLuaObject cfg.settings}) + '' + + (optionalString (cfg.testRunners != null) '' + table.insert(require("dap-python").test_runners, + ${toLuaObject (builtins.mapAttrs (_: lib.nixvim.mkRaw) cfg.testRunners)}) + '') + + (optionalString (cfg.customConfigurations != null) '' + table.insert(require("dap").configurations.python, ${toLuaObject cfg.customConfigurations}) + '') + + (optionalString (cfg.resolvePython != null) '' + require("dap-python").resolve_python = ${toLuaObject cfg.resolvePython} + '') + + (optionalString (cfg.testRunner != null) '' + require("dap-python").test_runner = ${toLuaObject cfg.testRunner}; + ''); + }; + }; + + # NOTE: Renames added in https://github.com/nix-community/nixvim/pull/2897 (2025-01-26) + imports = [ ./deprecations.nix ]; +} diff --git a/plugins/by-name/dap-python/deprecations.nix b/plugins/by-name/dap-python/deprecations.nix new file mode 100644 index 00000000..1b0a50d8 --- /dev/null +++ b/plugins/by-name/dap-python/deprecations.nix @@ -0,0 +1,41 @@ +{ lib, ... }: +let + oldPluginBasePath = [ + "plugins" + "dap" + "extensions" + "dap-python" + ]; + newPluginBasePath = [ + "plugins" + "dap-python" + ]; + + settingsPath = newPluginBasePath ++ [ "settings" ]; + + renamedOptions = [ + [ "enable" ] + [ "adapterPythonPath" ] + [ "customConfigurations" ] + [ "resolvePython" ] + [ "testRunner" ] + [ "testRunners" ] + ]; + + renamedSettingsOptions = [ + "console" + "includeConfigs" + ]; + + renameWarnings = + lib.nixvim.mkSettingsRenamedOptionModules oldPluginBasePath settingsPath + renamedSettingsOptions; +in +{ + imports = + renameWarnings + ++ (map ( + optionPath: + lib.mkRenamedOptionModule (oldPluginBasePath ++ optionPath) (newPluginBasePath ++ optionPath) + ) renamedOptions); +} diff --git a/plugins/by-name/dap/dap-python.nix b/plugins/by-name/dap/dap-python.nix deleted file mode 100644 index f3a7ddb1..00000000 --- a/plugins/by-name/dap/dap-python.nix +++ /dev/null @@ -1,103 +0,0 @@ -{ - lib, - config, - pkgs, - ... -}: -let - inherit (lib) - optionalString - types - ; - inherit (lib.nixvim) - defaultNullOpts - mkNullOrOption - toLuaObject - ; - - cfg = config.plugins.dap.extensions.dap-python; - dapHelpers = import ./dapHelpers.nix { inherit lib; }; -in -{ - options.plugins.dap.extensions.dap-python = { - enable = lib.mkEnableOption "dap-python"; - - package = lib.mkPackageOption pkgs "dap-python" { - default = [ - "vimPlugins" - "nvim-dap-python" - ]; - }; - - adapterPythonPath = lib.mkOption { - default = lib.getExe (pkgs.python3.withPackages (ps: with ps; [ debugpy ])); - defaultText = lib.literalExpression '' - lib.getExe (pkgs.python3.withPackages (ps: with ps; [ debugpy ])) - ''; - description = "Path to the python interpreter. Path must be absolute or in $PATH and needs to have the debugpy package installed."; - type = types.str; - }; - - console = defaultNullOpts.mkEnumFirstDefault [ - "integratedTerminal" - "internalConsole" - "externalTerminal" - ] "Debugpy console."; - - customConfigurations = mkNullOrOption (types.listOf dapHelpers.configurationOption) "Custom python configurations for dap."; - - includeConfigs = defaultNullOpts.mkBool true "Add default configurations."; - - resolvePython = defaultNullOpts.mkLuaFn null '' - Function to resolve path to python to use for program or test execution. - By default the `VIRTUAL_ENV` and `CONDA_PREFIX` environment variables are used if present. - ''; - - testRunner = mkNullOrOption (types.either types.str types.rawLua) '' - The name of test runner to use by default. - The default value is dynamic and depends on `pytest.ini` or `manage.py` markers. - If neither is found "unittest" is used. - ''; - - testRunners = mkNullOrOption (with lib.types; attrsOf strLuaFn) '' - Set to register test runners. - Built-in are test runners for unittest, pytest and django. - The key is the test runner name, the value a function to generate the - module name to run and its arguments. - See |dap-python.TestRunner|. - ''; - }; - - config = - let - options = with cfg; { - inherit console; - include_configs = includeConfigs; - }; - in - lib.mkIf cfg.enable { - extraPlugins = [ cfg.package ]; - - plugins.dap = { - enable = true; - - extensionConfigLua = - '' - require("dap-python").setup("${cfg.adapterPythonPath}", ${toLuaObject options}) - '' - + (optionalString (cfg.testRunners != null) '' - table.insert(require("dap-python").test_runners, - ${toLuaObject (builtins.mapAttrs (_: lib.nixvim.mkRaw) cfg.testRunners)}) - '') - + (optionalString (cfg.customConfigurations != null) '' - table.insert(require("dap").configurations.python, ${toLuaObject cfg.customConfigurations}) - '') - + (optionalString (cfg.resolvePython != null) '' - require("dap-python").resolve_python = ${toLuaObject cfg.resolvePython} - '') - + (optionalString (cfg.testRunner != null) '' - require("dap-python").test_runner = ${toLuaObject cfg.testRunner}; - ''); - }; - }; -} diff --git a/plugins/by-name/dap/default.nix b/plugins/by-name/dap/default.nix index 6ea78cb8..9acbc75a 100644 --- a/plugins/by-name/dap/default.nix +++ b/plugins/by-name/dap/default.nix @@ -13,7 +13,6 @@ let in lib.nixvim.plugins.mkNeovimPlugin { imports = [ - ./dap-python.nix ./dap-ui.nix ./dap-virtual-text.nix ]; diff --git a/tests/test-sources/plugins/by-name/dap/dap-python.nix b/tests/test-sources/plugins/by-name/dap-python/default.nix similarity index 80% rename from tests/test-sources/plugins/by-name/dap/dap-python.nix rename to tests/test-sources/plugins/by-name/dap-python/default.nix index 7ef06cb3..b5af602a 100644 --- a/tests/test-sources/plugins/by-name/dap/dap-python.nix +++ b/tests/test-sources/plugins/by-name/dap-python/default.nix @@ -1,10 +1,10 @@ { empty = { - plugins.dap.extensions.dap-python.enable = true; + plugins.dap-python.enable = true; }; example = { - plugins.dap.extensions.dap-python = { + plugins.dap-python = { enable = true; customConfigurations = [ @@ -34,12 +34,14 @@ }; default = { - plugins.dap.extensions.dap-python = { + plugins.dap-python = { enable = true; - console = "integratedTerminal"; - includeConfigs = true; adapterPythonPath = "python3"; + settings = { + console = "integratedTerminal"; + includeConfigs = true; + }; }; }; }