diff options
author | Vladimír Čunát <v@cunat.cz> | 2019-03-10 08:04:21 +0100 |
---|---|---|
committer | Vladimír Čunát <v@cunat.cz> | 2019-03-10 08:04:21 +0100 |
commit | bf47162c26641af76083b0d26ceb477be6a620ff (patch) | |
tree | 6aac7576850659e3c0e880036bcbeed56a70662b /lib | |
parent | 5d7ab319493974dbd8514d99941e6aa1108cc05f (diff) | |
parent | 213d6dd6ac1e440e95398448dae4bd6cf24989dd (diff) | |
download | nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.tar nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.tar.gz nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.tar.bz2 nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.tar.lz nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.tar.xz nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.tar.zst nixpkgs-bf47162c26641af76083b0d26ceb477be6a620ff.zip |
Merge branch 'master' into staging-next
Hydra nixpkgs: ?compare=1508887
Diffstat (limited to 'lib')
-rw-r--r-- | lib/default.nix | 2 | ||||
-rw-r--r-- | lib/modules.nix | 18 | ||||
-rw-r--r-- | lib/options.nix | 4 | ||||
-rw-r--r-- | lib/trivial.nix | 3 | ||||
-rw-r--r-- | lib/types.nix | 6 |
5 files changed, 26 insertions, 7 deletions
diff --git a/lib/default.nix b/lib/default.nix index dbb90081b2c..688c117d52b 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -59,7 +59,7 @@ let stringLength sub substring tail; inherit (trivial) id const concat or and bitAnd bitOr bitXor bitNot boolToString mergeAttrs flip mapNullable inNixShell min max - importJSON warn info nixpkgsVersion version mod compare + importJSON warn info showWarnings nixpkgsVersion version mod compare splitByAndCompare functionArgs setFunctionArgs isFunction; inherit (fixedPoints) fix fix' converge extends composeExtensions makeExtensible makeExtensibleWithCustomName; diff --git a/lib/modules.nix b/lib/modules.nix index a41c9da610a..0869eae1982 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -476,8 +476,22 @@ rec { optionSet to options of type submodule. FIXME: remove eventually. */ fixupOptionType = loc: opt: - if opt.type.getSubModules or null == null - then opt // { type = opt.type or types.unspecified; } + let + options = opt.options or + (throw "Option `${showOption loc'}' has type optionSet but has no option attribute, in ${showFiles opt.declarations}."); + f = tp: + let optionSetIn = type: (tp.name == type) && (tp.functor.wrapped.name == "optionSet"); + in + if tp.name == "option set" || tp.name == "submodule" then + throw "The option ${showOption loc} uses submodules without a wrapping type, in ${showFiles opt.declarations}." + else if optionSetIn "attrsOf" then types.attrsOf (types.submodule options) + else if optionSetIn "loaOf" then types.loaOf (types.submodule options) + else if optionSetIn "listOf" then types.listOf (types.submodule options) + else if optionSetIn "nullOr" then types.nullOr (types.submodule options) + else tp; + in + if opt.type.getSubModules or null == null + then opt // { type = f (opt.type or types.unspecified); } else opt // { type = opt.type.substSubModules opt.options; options = []; }; diff --git a/lib/options.nix b/lib/options.nix index 5cea99067aa..a16a980398d 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -48,6 +48,8 @@ rec { visible ? null, # Whether the option can be set only once readOnly ? null, + # Deprecated, used by types.optionSet. + options ? null } @ attrs: attrs // { _type = "option"; }; @@ -141,7 +143,7 @@ rec { docOption = rec { loc = opt.loc; name = showOption opt.loc; - description = opt.description or (throw "Option `${name}' has no description."); + description = opt.description or (lib.warn "Option `${name}' has no description." "This option has no description."); declarations = filter (x: x != unknownModule) opt.declarations; internal = opt.internal or false; visible = opt.visible or true; diff --git a/lib/trivial.nix b/lib/trivial.nix index 3f0816b5540..2d682961035 100644 --- a/lib/trivial.nix +++ b/lib/trivial.nix @@ -259,9 +259,10 @@ rec { # TODO: figure out a clever way to integrate location information from # something like __unsafeGetAttrPos. - warn = msg: builtins.trace "WARNING: ${msg}"; + warn = msg: builtins.trace "[1;31mwarning: ${msg}[0m"; info = msg: builtins.trace "INFO: ${msg}"; + showWarnings = warnings: res: lib.fold (w: x: warn w x) res warnings; ## Function annotations diff --git a/lib/types.nix b/lib/types.nix index 7a88e1b9e36..b225119299d 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -469,8 +469,10 @@ rec { # Obsolete alternative to configOf. It takes its option # declarations from the ‘options’ attribute of containing option # declaration. - optionSet = builtins.throw "types.optionSet is deprecated; use types.submodule instead" "optionSet"; - + optionSet = mkOptionType { + name = builtins.trace "types.optionSet is deprecated; use types.submodule instead" "optionSet"; + description = "option set"; + }; # Augment the given type with an additional type check function. addCheck = elemType: check: elemType // { check = x: elemType.check x && check x; }; |