From a5f6cdfd7ef36c0ee3c8bda8b487d1292838862f Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Mon, 2 Apr 2018 17:21:35 +0200 Subject: [PATCH] lib/debug: add traceValFn, traceValSeqFn, traceValSeqNFn Being able to modify the value on-the-fly before printing is very useful in practice. --- lib/debug.nix | 9 ++++++--- lib/default.nix | 9 +++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/debug.nix b/lib/debug.nix index d163e60b6957..d5e9473ff773 100644 --- a/lib/debug.nix +++ b/lib/debug.nix @@ -17,7 +17,8 @@ rec { traceIf = p: msg: x: if p then trace msg x else x; - traceVal = x: trace x x; + traceValFn = f: x: trace (f x) x; + traceVal = traceValFn id; traceXMLVal = x: trace (builtins.toXML x) x; traceXMLValMarked = str: x: trace (str + builtins.toXML x) x; @@ -44,9 +45,11 @@ rec { (modify depth snip x)) y; /* `traceSeq`, but the same value is traced and returned */ - traceValSeq = v: traceVal (builtins.deepSeq v v); + traceValSeqFn = f: v: traceVal f (builtins.deepSeq v v); + traceValSeq = traceValSeqFn id; /* `traceValSeq` but with fixed depth */ - traceValSeqN = depth: v: traceSeqN depth v v; + traceValSeqNFn = f: depth: v: traceSeqN depth (f v) v; + traceValSeqN = traceValSeqNFn id; # this can help debug your code as well - designed to not produce thousands of lines diff --git a/lib/default.nix b/lib/default.nix index c292ed33e1da..23e276732db6 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -115,11 +115,12 @@ let unknownModule mkOption; inherit (types) isType setType defaultTypeMerge defaultFunctor isOptionType mkOptionType; - inherit (debug) addErrorContextToAttrs traceIf traceVal + inherit (debug) addErrorContextToAttrs traceIf traceVal traceValFn traceXMLVal traceXMLValMarked traceSeq traceSeqN traceValSeq - traceValSeqN traceShowVal traceShowValMarked - showVal traceCall traceCall2 traceCall3 traceValIfNot runTests - testAllTrue strict traceCallXml attrNamesToStr; + traceValSeqFn traceValSeqN traceValSeqNFn traceShowVal + traceShowValMarked showVal traceCall traceCall2 traceCall3 + traceValIfNot runTests testAllTrue strict traceCallXml + attrNamesToStr; inherit (misc) maybeEnv defaultMergeArg defaultMerge foldArgs defaultOverridableDelayableArgs composedArgsAndFun maybeAttrNullable maybeAttr ifEnable checkFlag getValue