summary refs log tree commit diff
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2023-08-18 11:36:51 +0200
committerRobert Hensing <robert@roberthensing.nl>2023-08-18 11:36:51 +0200
commit5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82 (patch)
tree76bd4303332501758d9101cba8d2bd4817c270df
parented9af6d93e7b1ae78cfae4cbfd2118cea7490c63 (diff)
downloadnixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.tar
nixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.tar.gz
nixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.tar.bz2
nixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.tar.lz
nixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.tar.xz
nixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.tar.zst
nixpkgs-5ad01f1b6f1c3a9b0ebe0d81b51761cc80291f82.zip
lib/modules: Report a better error when option tree has bare type
Improves on 0d472a62012364d064f0b75f1da491242c6ae9c6
- https://github.com/NixOS/nixpkgs/pull/242339

We actually do have the file name.

Thanks Shawn8901 for the [feedback]!

feedback: https://github.com/NixOS/nixpkgs/pull/242339#issuecomment-1683107055
-rw-r--r--lib/modules.nix6
-rwxr-xr-xlib/tests/modules.sh6
2 files changed, 6 insertions, 6 deletions
diff --git a/lib/modules.nix b/lib/modules.nix
index 9371ba4b27a..5c2fb48868c 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -633,7 +633,7 @@ let
           optionDecls = filter
             (m: m.options?_type
                 && (m.options._type == "option"
-                    || throwDeclarationTypeError loc m.options._type
+                    || throwDeclarationTypeError loc m.options._type m._file
                 )
             )
             decls;
@@ -698,14 +698,14 @@ let
           ) unmatchedDefnsByName);
     };
 
-  throwDeclarationTypeError = loc: actualTag:
+  throwDeclarationTypeError = loc: actualTag: file:
     let
       name = lib.strings.escapeNixIdentifier (lib.lists.last loc);
       path = showOption loc;
       depth = length loc;
 
       paragraphs = [
-        "Expected an option declaration at option path `${path}` but got an attribute set with type ${actualTag}"
+        "In module ${file}: expected an option declaration at option path `${path}` but got an attribute set with type ${actualTag}"
       ] ++ optional (actualTag == "option-type") ''
           When declaring an option, you must wrap the type in a `mkOption` call. It should look somewhat like:
               ${comment}
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
index 5f2e3f2a311..2c5e4cdbcec 100755
--- a/lib/tests/modules.sh
+++ b/lib/tests/modules.sh
@@ -394,9 +394,9 @@ checkConfigError \
   ./declare-set.nix ./declare-enable-nested.nix
 
 # Options: accidental use of an option-type instead of option (or other tagged type; unlikely)
-checkConfigError 'Expected an option declaration at option path .result. but got an attribute set with type option-type' config.result ./options-type-error-typical.nix
-checkConfigError 'Expected an option declaration at option path .result.here. but got an attribute set with type option-type' config.result.here ./options-type-error-typical-nested.nix
-checkConfigError 'Expected an option declaration at option path .result. but got an attribute set with type configuration' config.result ./options-type-error-configuration.nix
+checkConfigError 'In module .*/options-type-error-typical.nix: expected an option declaration at option path .result. but got an attribute set with type option-type' config.result ./options-type-error-typical.nix
+checkConfigError 'In module .*/options-type-error-typical-nested.nix: expected an option declaration at option path .result.here. but got an attribute set with type option-type' config.result.here ./options-type-error-typical-nested.nix
+checkConfigError 'In module .*/options-type-error-configuration.nix: expected an option declaration at option path .result. but got an attribute set with type configuration' config.result ./options-type-error-configuration.nix
 
 # Check that that merging of option collisions doesn't depend on type being set
 checkConfigError 'The option .group..*would be a parent of the following options, but its type .<no description>. does not support nested options.\n\s*- option.s. with prefix .group.enable..*' config.group.enable ./merge-typeless-option.nix