From 8eb5763bbbb414c432ced741c5fe8052154d0816 Mon Sep 17 00:00:00 2001 From: Stanislav Asunkin <1353637+stasjok@users.noreply.github.com> Date: Sun, 21 Jul 2024 09:59:04 +0300 Subject: [PATCH] modules/lua-loader: make enable option nullable This avoids having the option always "defined". This also avoids luaLoader configuration in extra files by default. Earlier `vim.loader.disable()` was always added to configs produced by `files` option, effectively disabling luaLoader even if it was explicitly enabled in a top-level configuration. --- modules/lua-loader.nix | 40 +++++++-------- tests/test-sources/modules/lua-loader.nix | 62 ++++++++++++++++++++--- 2 files changed, 76 insertions(+), 26 deletions(-) diff --git a/modules/lua-loader.nix b/modules/lua-loader.nix index 67296226..d1667d31 100644 --- a/modules/lua-loader.nix +++ b/modules/lua-loader.nix @@ -1,30 +1,30 @@ -{ lib, config, ... }: -with lib; +{ + lib, + config, + helpers, + ... +}: let cfg = config.luaLoader; in { - options.luaLoader = { - enable = mkOption { - type = types.bool; - default = false; - description = '' - Whether to enable/disable the experimental lua loader: + options.luaLoader.enable = helpers.mkNullOrOption lib.types.bool '' + Whether to enable/disable the experimental lua loader: - If `true`: Enables the experimental Lua module loader: - - overrides loadfile - - adds the lua loader using the byte-compilation cache - - adds the libs loader - - removes the default Neovim loader + If `true`: Enables the experimental Lua module loader: + - overrides loadfile + - adds the lua loader using the byte-compilation cache + - adds the libs loader + - removes the default Neovim loader - If `false`: Disables the experimental Lua module loader: - - removes the loaders - - adds the default Neovim loader - ''; - }; - }; + If `false`: Disables the experimental Lua module loader: + - removes the loaders + - adds the default Neovim loader - config = { + If `null`: Nothing is configured. + ''; + + config = helpers.mkIfNonNull' cfg.enable { extraConfigLuaPre = if cfg.enable then "vim.loader.enable()" else "vim.loader.disable()"; }; } diff --git a/tests/test-sources/modules/lua-loader.nix b/tests/test-sources/modules/lua-loader.nix index 24ab102b..ed38fe35 100644 --- a/tests/test-sources/modules/lua-loader.nix +++ b/tests/test-sources/modules/lua-loader.nix @@ -1,9 +1,59 @@ { - enabled = { - luaLoader.enable = true; - }; + # Test that nothing is configured by default + default.module = + { config, ... }: + { + files."files_test.lua" = { }; - disabled = { - luaLoader.enable = false; - }; + assertions = [ + { + assertion = builtins.match ".*vim\.loader.*" config.content == null; + message = "No luaLoader configuration is expected in init.lua by default."; + } + { + assertion = builtins.match ".*vim\.loader.*" config.files."files_test.lua".content == null; + message = "No luaLoader configuration is expected in 'files' submodules."; + } + ]; + }; + + # Test lua loader enabled + enabled.module = + { config, ... }: + { + luaLoader.enable = true; + + files."files_test.lua" = { }; + + assertions = [ + { + assertion = builtins.match ".*vim\.loader\.enable\(\).*" config.content != null; + message = "luaLoader is expected to be explicitly enabled."; + } + { + assertion = builtins.match ".*vim\.loader.*" config.files."files_test.lua".content == null; + message = "No luaLoader configuration is expected in 'files' submodules."; + } + ]; + }; + + # Test lua loader disabled + disabled.module = + { config, ... }: + { + luaLoader.enable = false; + + files."files_test.lua" = { }; + + assertions = [ + { + assertion = builtins.match ".*vim\.loader\.disable\(\).*" config.content != null; + message = "luaLoader is expected to be explicitly disabled."; + } + { + assertion = builtins.match ".*vim\.loader.*" config.files."files_test.lua".content == null; + message = "No luaLoader configuration is expected in 'files' submodules."; + } + ]; + }; }