Unverified Commit 0d5c1ac1 authored by Naïm Favier's avatar Naïm Favier Committed by GitHub
Browse files

Merge pull request #222516 from ncfavier/options-better-error

lib/modules: better error for invalid option declarations
parents 6b53f55d 87517642
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -567,15 +567,19 @@ rec {
        zipAttrsWith (n: concatLists)
          (map (module: let subtree = module.${attr}; in
              if !(builtins.isAttrs subtree) then
                throw ''
                  You're trying to declare a value of type `${builtins.typeOf subtree}'
                  rather than an attribute-set for the option
                throw (if attr == "config" then ''
                  You're trying to define a value of type `${builtins.typeOf subtree}'
                  rather than an attribute set for the option
                  `${builtins.concatStringsSep "." prefix}'!

                  This usually happens if `${builtins.concatStringsSep "." prefix}' has option
                  definitions inside that are not matched. Please check how to properly define
                  this option by e.g. referring to `man 5 configuration.nix'!
                ''
                '' else ''
                  An option declaration for `${builtins.concatStringsSep "." prefix}' has type
                  `${builtins.typeOf subtree}' rather than an attribute set.
                  Did you mean to define this outside of `options'?
                '')
              else
                mapAttrs (n: f module) subtree
              ) modules);
+1 −1
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ checkConfigOutput '^"foo"$' config.submodule.foo ./declare-submoduleWith-special
## shorthandOnlyDefines config behaves as expected
checkConfigOutput '^true$' config.submodule.config ./declare-submoduleWith-shorthand.nix ./define-submoduleWith-shorthand.nix
checkConfigError 'is not of type `boolean' config.submodule.config ./declare-submoduleWith-shorthand.nix ./define-submoduleWith-noshorthand.nix
checkConfigError "You're trying to declare a value of type \`bool'\n\s*rather than an attribute-set for the option" config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-shorthand.nix
checkConfigError "You're trying to define a value of type \`bool'\n\s*rather than an attribute set for the option" config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-shorthand.nix
checkConfigOutput '^true$' config.submodule.config ./declare-submoduleWith-noshorthand.nix ./define-submoduleWith-noshorthand.nix

## submoduleWith should merge all modules in one swoop