From 5c35166b71353cb32c89e344ba78c37c6d82ff0f Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Mon, 27 Jan 2025 17:26:08 +0100 Subject: [PATCH 1/2] lib/modules: improve mismatching class error mesage --- lib/modules.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/modules.nix b/lib/modules.nix index 79b8f25c2f43..4d2d8e0b08b6 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -367,7 +367,14 @@ let if m._class == null || m._class == class then m else - throw "The module ${m._file or m.key} was imported into ${class} instead of ${m._class}." + throw '' + The module `${m._file or m.key}` (class: ${lib.strings.escapeNixString m._class}) cannot be imported into a module evaluation that expects class ${lib.strings.escapeNixString class}. + + Help: + - Ensure that you are importing the correct module. + - Verify that the module's `_class`, ${lib.strings.escapeNixString m._class} matches the expected `class` ${lib.strings.escapeNixString class}. + - If you are using a custom class, make sure it is correctly defined and used consistently across your modules. + '' else m: m; From b3884c8b7d7f6e7bb3efb2199894b6cbdcea43c7 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 29 Jan 2025 11:50:16 +0100 Subject: [PATCH 2/2] lib/modules: tests change expected error for class mismatch --- lib/tests/modules.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index beb191aed0c1..c86e0aeec6dc 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -538,12 +538,12 @@ checkConfigOutput '^1$' config.sub.specialisation.value ./extendModules-168767-i # Class checks, evalModules checkConfigOutput '^{}$' config.ok.config ./class-check.nix checkConfigOutput '"nixos"' config.ok.class ./class-check.nix -checkConfigError 'The module .*/module-class-is-darwin.nix was imported into nixos instead of darwin.' config.fail.config ./class-check.nix -checkConfigError 'The module foo.nix#darwinModules.default was imported into nixos instead of darwin.' config.fail-anon.config ./class-check.nix +checkConfigError 'The module `.*/module-class-is-darwin.nix`.*?expects class "nixos".' config.fail.config ./class-check.nix +checkConfigError 'The module `foo.nix#darwinModules.default`.*?expects class "nixos".' config.fail-anon.config ./class-check.nix # Class checks, submoduleWith checkConfigOutput '^{}$' config.sub.nixosOk ./class-check.nix -checkConfigError 'The module .*/module-class-is-darwin.nix was imported into nixos instead of darwin.' config.sub.nixosFail.config ./class-check.nix +checkConfigError 'The module `.*/module-class-is-darwin.nix`.*?expects class "nixos".' config.sub.nixosFail.config ./class-check.nix # submoduleWith type merge with different class checkConfigError 'A submoduleWith option is declared multiple times with conflicting class values "darwin" and "nixos".' config.sub.mergeFail.config ./class-check.nix