Skip to content

Commit 0330989

Browse files
rnhmjojworldofpeace
authored andcommitted
lib/types: warn loaOf is deprecated
1 parent cde4649 commit 0330989

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

lib/types.nix

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -295,34 +295,51 @@ rec {
295295
# List or attribute set of ...
296296
loaOf = elemType:
297297
let
298-
convertAllLists = defs:
298+
convertAllLists = loc: defs:
299299
let
300300
padWidth = stringLength (toString (length defs));
301301
unnamedPrefix = i: "unnamed-" + fixedWidthNumber padWidth i + ".";
302302
in
303-
imap1 (i: convertIfList (unnamedPrefix i)) defs;
304-
305-
convertIfList = unnamedPrefix: def:
303+
imap1 (i: convertIfList loc (unnamedPrefix i)) defs;
304+
convertIfList = loc: unnamedPrefix: def:
306305
if isList def.value then
307306
let
308307
padWidth = stringLength (toString (length def.value));
309308
unnamed = i: unnamedPrefix + fixedWidthNumber padWidth i;
309+
res =
310+
{ inherit (def) file;
311+
value = listToAttrs (
312+
imap1 (elemIdx: elem:
313+
{ name = elem.name or (unnamed elemIdx);
314+
value = elem;
315+
}) def.value);
316+
};
317+
option = concatStringsSep "." loc;
318+
sample = take 3 def.value;
319+
list = concatMapStrings (x: ''{ name = "${x.name or "unnamed"}"; ...} '') sample;
320+
set = concatMapStrings (x: ''${x.name or "unnamed"} = {...}; '') sample;
321+
msg = ''
322+
In file ${def.file}
323+
a list is being assigned to the option config.${option}.
324+
This will soon be an error as type loaOf is deprecated.
325+
See https://git.io/fj2zm for more information.
326+
Do
327+
${option} =
328+
{ ${set}...}
329+
instead of
330+
${option} =
331+
[ ${list}...]
332+
'';
310333
in
311-
{ inherit (def) file;
312-
value = listToAttrs (
313-
imap1 (elemIdx: elem:
314-
{ name = elem.name or (unnamed elemIdx);
315-
value = elem;
316-
}) def.value);
317-
}
334+
lib.warn msg res
318335
else
319336
def;
320337
attrOnly = attrsOf elemType;
321338
in mkOptionType rec {
322339
name = "loaOf";
323340
description = "list or attribute set of ${elemType.description}s";
324341
check = x: isList x || isAttrs x;
325-
merge = loc: defs: attrOnly.merge loc (convertAllLists defs);
342+
merge = loc: defs: attrOnly.merge loc (convertAllLists loc defs);
326343
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name?>"]);
327344
getSubModules = elemType.getSubModules;
328345
substSubModules = m: loaOf (elemType.substSubModules m);

0 commit comments

Comments
 (0)