From afb1a2e3764e517782364efdbc313d2266dfb395 Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 7 Dec 2023 16:53:01 +0100 Subject: [PATCH] lib/modules: Test optionless module errors from #131205 --- lib/modules.nix | 2 ++ lib/tests/modules.sh | 5 +++++ lib/tests/modules/error-mkOption-in-config.nix | 14 ++++++++++++++ .../modules/error-mkOption-in-submodule-config.nix | 12 ++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 lib/tests/modules/error-mkOption-in-config.nix create mode 100644 lib/tests/modules/error-mkOption-in-submodule-config.nix diff --git a/lib/modules.nix b/lib/modules.nix index 4acbce39e94d..64939a1eae81 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -275,6 +275,8 @@ let "The option `${optText}' does not exist. Definition values:${defText}"; in if attrNames options == [ "_module" ] + # No options were declared at all (`_module` is built in) + # but we do have unmatched definitions, and no freeformType (earlier conditions) then let optionName = showOption prefix; diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index 21d4978a1160..789d8e00dda8 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -94,6 +94,11 @@ checkConfigOutput '^true$' config.result ./module-argument-default.nix # gvariant checkConfigOutput '^true$' config.assertion ./gvariant.nix +# https://github.com/NixOS/nixpkgs/pull/131205 +checkConfigError 'It seems as if you.re trying to declare an option by placing it into .config. rather than .options.' config.wrong1 ./error-mkOption-in-config.nix +checkConfigError 'The option .sub.wrong2. does not exist. Definition values:' config.sub ./error-mkOption-in-submodule-config.nix +checkConfigError '.*This can happen if you e.g. declared your options in .types.submodule.' config.sub ./error-mkOption-in-submodule-config.nix + # types.pathInStore checkConfigOutput '".*/store/0lz9p8xhf89kb1c1kk6jxrzskaiygnlh-bash-5.2-p15.drv"' config.pathInStore.ok1 ./types.nix checkConfigOutput '".*/store/0fb3ykw9r5hpayd05sr0cizwadzq1d8q-bash-5.2-p15"' config.pathInStore.ok2 ./types.nix diff --git a/lib/tests/modules/error-mkOption-in-config.nix b/lib/tests/modules/error-mkOption-in-config.nix new file mode 100644 index 000000000000..2d78cd8db8ba --- /dev/null +++ b/lib/tests/modules/error-mkOption-in-config.nix @@ -0,0 +1,14 @@ +{ lib, ... }: +let + inherit (lib) mkOption; +in +{ + wrong1 = mkOption { + }; + # This is not actually reported separately, so could be omitted from the test + # but it makes the example more realistic. + # Making it parse this _config_ as options would too risky. What if it's not + # options but other values, that abort, throw, diverge, etc? + nest.wrong2 = mkOption { + }; +} diff --git a/lib/tests/modules/error-mkOption-in-submodule-config.nix b/lib/tests/modules/error-mkOption-in-submodule-config.nix new file mode 100644 index 000000000000..91ac3d65780a --- /dev/null +++ b/lib/tests/modules/error-mkOption-in-submodule-config.nix @@ -0,0 +1,12 @@ +{ lib, ... }: +let + inherit (lib) mkOption; +in +{ + options.sub = lib.mkOption { + type = lib.types.submodule { + wrong2 = mkOption {}; + }; + default = {}; + }; +}