From 7c20e68f6be7b7421d8717cc8d0ad1dadef76c67 Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Wed, 16 Sep 2020 20:05:07 +0200 Subject: [PATCH] lib/options: Introduce showDefs For pretty-printing definitions, including file and values --- lib/options.nix | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/options.nix b/lib/options.nix index 0494a597ab80..73856573a5d1 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -213,6 +213,24 @@ rec { else escaped; in (concatStringsSep ".") (map escapeOptionPart parts); showFiles = files: concatStringsSep " and " (map (f: "`${f}'") files); + + showDefs = defs: concatMapStrings (def: + let + # Pretty print the value for display, if successful + prettyEval = builtins.tryEval (lib.generators.toPretty {} def.value); + # Split it into its lines + lines = filter (v: ! isList v) (builtins.split "\n" prettyEval.value); + # Only display the first 5 lines, and indent them for better visibility + value = concatStringsSep "\n " (take 5 lines ++ optional (length lines > 5) "..."); + result = + # Don't print any value if evaluating the value strictly fails + if ! prettyEval.success then "" + # Put it on a new line if it consists of multiple + else if length lines > 1 then ":\n " + value + else ": " + value; + in "\n- In `${def.file}'${result}" + ) defs; + unknownModule = ""; }