From 64a1c1da3ef8cec88bcecefc3dfcf1ea9fbc8bc9 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Mon, 17 Feb 2025 15:59:53 +0100 Subject: [PATCH] lib.types: Make functor.wrapped deprecation work in unprocessed types Otherwise nested types such as `attrsOf (attrsOf int)` won't have a backwards compatible `type.nestedTypes.elemType.functor.wrapped`. Follow-up work to https://github.com/NixOS/nixpkgs/pull/366015 --- lib/types.nix | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/types.nix b/lib/types.nix index 069d7b1703273..cda048fd10cac 100644 --- a/lib/types.nix +++ b/lib/types.nix @@ -86,7 +86,7 @@ let else { elemType = merged; }; wrappedDeprecationMessage = { loc }: lib.warn '' - The deprecated `type.functor.wrapped` attribute of the option `${showOption loc}` is accessed, use `type.nestedTypes.elemType` instead. + The deprecated `${lib.optionalString (loc != null) "type."}functor.wrapped` attribute ${lib.optionalString (loc != null) "of the option `${showOption loc}` "}is accessed, use `${lib.optionalString (loc != null) "type."}nestedTypes.elemType` instead. '' payload.elemType; }; @@ -227,7 +227,16 @@ rec { { _type = "option-type"; inherit name check merge emptyValue getSubOptions getSubModules substSubModules - typeMerge functor deprecationMessage nestedTypes descriptionClass; + typeMerge deprecationMessage nestedTypes descriptionClass; + functor = + if functor ? wrappedDeprecationMessage then + functor // { + wrapped = functor.wrappedDeprecationMessage { + loc = null; + }; + } + else + functor; description = if description == null then name else description; };