mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 05:05:29 +03:00
lib/modules: Only interpret class declaration in non-shorthand mode
This is to avoid stealing keys from submodules. `class` might be common enough that reinterpreting existing `class` attributes in configurations as a declaration leads to fairly widespread problems.
This commit is contained in:
parent
1f4a58ef03
commit
84b1b01702
4 changed files with 19 additions and 1 deletions
|
@ -511,7 +511,7 @@ let
|
||||||
imports = m.require or [] ++ m.imports or [];
|
imports = m.require or [] ++ m.imports or [];
|
||||||
options = {};
|
options = {};
|
||||||
config = addFreeformType (removeAttrs m ["_file" "key" "disabledModules" "require" "imports" "freeformType"]);
|
config = addFreeformType (removeAttrs m ["_file" "key" "disabledModules" "require" "imports" "freeformType"]);
|
||||||
class = m.class or null;
|
class = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
applyModuleArgsIfFunction = key: f: args@{ config, options, lib, ... }:
|
applyModuleArgsIfFunction = key: f: args@{ config, options, lib, ... }:
|
||||||
|
|
|
@ -255,6 +255,8 @@ checkConfigError 'A definition for option .* is not of type .*' \
|
||||||
## Freeform modules
|
## Freeform modules
|
||||||
# Assigning without a declared option should work
|
# Assigning without a declared option should work
|
||||||
checkConfigOutput '^"24"$' config.value ./freeform-attrsOf.nix ./define-value-string.nix
|
checkConfigOutput '^"24"$' config.value ./freeform-attrsOf.nix ./define-value-string.nix
|
||||||
|
# Shorthand modules interpret `meta` and `class` as config items
|
||||||
|
checkConfigOutput '^true$' options._module.args.value.result ./freeform-attrsOf.nix ./define-freeform-keywords-shorthand.nix
|
||||||
# No freeform assignments shouldn't make it error
|
# No freeform assignments shouldn't make it error
|
||||||
checkConfigOutput '^{ }$' config ./freeform-attrsOf.nix
|
checkConfigOutput '^{ }$' config ./freeform-attrsOf.nix
|
||||||
# but only if the type matches
|
# but only if the type matches
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
./module-class-is-nixos.nix
|
./module-class-is-nixos.nix
|
||||||
{ _file = "foo.nix#darwinModules.default";
|
{ _file = "foo.nix#darwinModules.default";
|
||||||
class = "darwin";
|
class = "darwin";
|
||||||
|
config = {};
|
||||||
imports = [];
|
imports = [];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
15
lib/tests/modules/define-freeform-keywords-shorthand.nix
Normal file
15
lib/tests/modules/define-freeform-keywords-shorthand.nix
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{ config, ... }: {
|
||||||
|
class = { "just" = "data"; };
|
||||||
|
a = "one";
|
||||||
|
b = "two";
|
||||||
|
meta = "meta";
|
||||||
|
|
||||||
|
_module.args.result =
|
||||||
|
let r = builtins.removeAttrs config [ "_module" ];
|
||||||
|
in builtins.trace (builtins.deepSeq r r) (r == {
|
||||||
|
a = "one";
|
||||||
|
b = "two";
|
||||||
|
class = { "just" = "data"; };
|
||||||
|
meta = "meta";
|
||||||
|
});
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue