about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2022-10-19 05:24:28 +0200
committerJan Tojnar <jtojnar@gmail.com>2022-10-19 05:24:28 +0200
commit457f28f6f85eea1b1671d62d2abe39297c9c90f7 (patch)
tree3c6e68534e7bfcde19893c830af7498b0606e6d2 /lib
parenta25e03e76ae1e0367419db1de009e1139d08de68 (diff)
parent1aa7d4e6c61526606d9e26f939cdb60ec8f45fcd (diff)
Merge branch 'master' into staging-next
; Conflicts:
;	pkgs/development/tools/codespell/default.nix

codespell 2.2.2 switched to pyproject & setuptools_scm:
https://github.com/codespell-project/codespell/pull/2523
Diffstat (limited to 'lib')
-rw-r--r--lib/options.nix12
-rwxr-xr-xlib/tests/modules.sh4
-rw-r--r--lib/types.nix4
3 files changed, 13 insertions, 7 deletions
diff --git a/lib/options.nix b/lib/options.nix
index 40c1af667619f..b069cfc7d4f0b 100644
--- a/lib/options.nix
+++ b/lib/options.nix
@@ -322,10 +322,16 @@ rec {
   showOption = parts: let
     escapeOptionPart = part:
       let
-        escaped = lib.strings.escapeNixString part;
-      in if escaped == "\"${part}\""
+        # We assume that these are "special values" and not real configuration data.
+        # If it is real configuration data, it is rendered incorrectly.
+        specialIdentifiers = [
+          "<name>"          # attrsOf (submodule {})
+          "*"               # listOf (submodule {})
+          "<function body>" # functionTo
+        ];
+      in if builtins.elem part specialIdentifiers
          then part
-         else escaped;
+         else lib.strings.escapeNixIdentifier part;
     in (concatStringsSep ".") (map escapeOptionPart parts);
   showFiles = files: concatStringsSep " and " (map (f: "`${f}'") files);
 
diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh
index 57d3b5a76cec1..2be9b5835090c 100755
--- a/lib/tests/modules.sh
+++ b/lib/tests/modules.sh
@@ -302,11 +302,11 @@ checkConfigOutput '^"baz"$' config.value.nested.bar.baz ./types-anything/mk-mods
 ## types.functionTo
 checkConfigOutput '^"input is input"$' config.result ./functionTo/trivial.nix
 checkConfigOutput '^"a b"$' config.result ./functionTo/merging-list.nix
-checkConfigError 'A definition for option .fun.\[function body\]. is not of type .string.. Definition values:\n\s*- In .*wrong-type.nix' config.result ./functionTo/wrong-type.nix
+checkConfigError 'A definition for option .fun.<function body>. is not of type .string.. Definition values:\n\s*- In .*wrong-type.nix' config.result ./functionTo/wrong-type.nix
 checkConfigOutput '^"b a"$' config.result ./functionTo/list-order.nix
 checkConfigOutput '^"a c"$' config.result ./functionTo/merging-attrs.nix
 checkConfigOutput '^"a bee"$' config.result ./functionTo/submodule-options.nix
-checkConfigOutput '^"fun.\[function body\].a fun.\[function body\].b"$' config.optionsResult ./functionTo/submodule-options.nix
+checkConfigOutput '^"fun.<function body>.a fun.<function body>.b"$' config.optionsResult ./functionTo/submodule-options.nix
 
 # moduleType
 checkConfigOutput '^"a b"$' config.resultFoo ./declare-variants.nix ./define-variant.nix
diff --git a/lib/types.nix b/lib/types.nix
index b11dca5e3fee7..b83898744df82 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -617,8 +617,8 @@ rec {
       descriptionClass = "composite";
       check = isFunction;
       merge = loc: defs:
-        fnArgs: (mergeDefinitions (loc ++ [ "[function body]" ]) elemType (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs)).mergedValue;
-      getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "[function body]" ]);
+        fnArgs: (mergeDefinitions (loc ++ [ "<function body>" ]) elemType (map (fn: { inherit (fn) file; value = fn.value fnArgs; }) defs)).mergedValue;
+      getSubOptions = prefix: elemType.getSubOptions (prefix ++ [ "<function body>" ]);
       getSubModules = elemType.getSubModules;
       substSubModules = m: functionTo (elemType.substSubModules m);
       functor = (defaultFunctor "functionTo") // { wrapped = elemType; };