summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2020-01-12 18:47:34 +0100
committerGitHub <noreply@github.com>2020-01-12 18:47:34 +0100
commit61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2 (patch)
tree1ce476de91c5a14c2af447fb5339e9c4ab7198fb /lib
parentc2e5ff3fe8e1e57cfbde9a098f55c8b8c2531b83 (diff)
parent13633bd21ac92dce92f920fd68578f5e430c6c0d (diff)
downloadnixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.tar
nixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.tar.gz
nixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.tar.bz2
nixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.tar.lz
nixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.tar.xz
nixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.tar.zst
nixpkgs-61cf52bc17ddec7d2c0a5ae18d74adac6c4b25d2.zip
Merge pull request #77501 from jtojnar/more-loaof-fxes
tree-wide: fix more warning related to loaOf deprecation
Diffstat (limited to 'lib')
-rw-r--r--lib/types.nix72
1 files changed, 67 insertions, 5 deletions
diff --git a/lib/types.nix b/lib/types.nix
index e6f84176657..ab325fd2009 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -340,18 +340,80 @@ rec {
             let
               padWidth = stringLength (toString (length def.value));
               unnamed = i: unnamedPrefix + fixedWidthNumber padWidth i;
+              anyString = placeholder "name";
+              nameAttrs = [
+                { path = [ "environment" "etc" ];
+                  name = "target";
+                }
+                { path = [ "containers" anyString "bindMounts" ];
+                  name = "mountPoint";
+                }
+                { path = [ "programs" "ssh" "knownHosts" ];
+                  # hostNames is actually a list so we would need to handle it only when singleton
+                  name = "hostNames";
+                }
+                { path = [ "fileSystems" ];
+                  name = "mountPoint";
+                }
+                { path = [ "boot" "specialFileSystems" ];
+                  name = "mountPoint";
+                }
+                { path = [ "services" "znapzend" "zetup" ];
+                  name = "dataset";
+                }
+                { path = [ "services" "znapzend" "zetup" anyString "destinations" ];
+                  name = "label";
+                }
+                { path = [ "services" "geoclue2" "appConfig" ];
+                  name = "desktopID";
+                }
+                { path = [ "home-manager" "users" anyString "programs" "ssh" "matchBlocks" ];
+                  name = "host"; # https://github.com/rycee/home-manager/blob/e8dbc3561373b68d12decb3c0d7c1ba245f138f7/modules/programs/ssh.nix#L265
+                }
+                { path = [ "home-manager" "users" anyString "home" "file" ];
+                  name = "target"; # https://github.com/rycee/home-manager/blob/0e9b7aab3c6c27bf020402e0e2ef20b65c040552/modules/files.nix#L33
+                }
+                { path = [ "home-manager" "users" anyString "xdg" "configFile" ];
+                  name = "target"; # https://github.com/rycee/home-manager/blob/54de0e1d79a1370e57a8f23bef89f99f9b92ab67/modules/misc/xdg.nix#L41
+                }
+                { path = [ "home-manager" "users" anyString "xdg" "dataFile" ];
+                  name = "target"; # https://github.com/rycee/home-manager/blob/54de0e1d79a1370e57a8f23bef89f99f9b92ab67/modules/misc/xdg.nix#L58
+                }
+              ];
+              matched = let
+                equals = a: b: b == anyString || a == b;
+                fallback = { name = "name"; };
+              in findFirst ({ path, ... }: all (v: v == true) (zipListsWith equals loc path)) fallback nameAttrs;
+              nameAttr = matched.name;
+              nameValueOld = value:
+                if isList value then
+                  if length value > 0 then
+                    "[ " + concatMapStringsSep " " escapeNixString value + " ]"
+                  else
+                    "[ ]"
+                else
+                  escapeNixString value;
+              nameValueNew = value: unnamed:
+                if isList value then
+                  if length value > 0 then
+                    head value
+                  else
+                    unnamed
+                else
+                  value;
               res =
                 { inherit (def) file;
                   value = listToAttrs (
                     imap1 (elemIdx: elem:
-                      { name  = elem.name or (unnamed elemIdx);
+                      { name  = nameValueNew (elem.${nameAttr} or (unnamed elemIdx)) (unnamed elemIdx);
                         value = elem;
                       }) def.value);
                 };
               option = concatStringsSep "." loc;
               sample = take 3 def.value;
-              list = concatMapStrings (x: ''{ name = "${x.name or "unnamed"}"; ...} '') sample;
-              set = concatMapStrings (x: ''${x.name or "unnamed"} = {...}; '') sample;
+              more = lib.optionalString (length def.value > 3) "... ";
+              list = concatMapStrings (x: ''{ ${nameAttr} = ${nameValueOld (x.${nameAttr} or "unnamed")}; ...} '') sample;
+              set = concatMapStrings (x: ''${nameValueNew (x.${nameAttr} or "unnamed") "unnamed"} = {...}; '') sample;
               msg = ''
                 In file ${def.file}
                 a list is being assigned to the option config.${option}.
@@ -359,10 +421,10 @@ rec {
                 See https://git.io/fj2zm for more information.
                 Do
                   ${option} =
-                    { ${set}...}
+                    { ${set}${more}}
                 instead of
                   ${option} =
-                    [ ${list}...]
+                    [ ${list}${more}]
               '';
             in
               lib.warn msg res