lib/debug: add traceFnSeqN
Immensely helpful when you want to see the changes a function makes to its value as it passes through. Example: ``` $ nix-instantiate --strict --eval -E '(with import ./lib; traceFnSeqN 2 "id" (x: x) { a.b.c = 3; })' trace: { fn = "id"; from = { a = { b = {…}; }; }; to = { a = { b = {…}; }; }; } { a = { b = { c = 3; }; }; } ```
This commit is contained in:
parent
ec334a1b01
commit
41e13149f7
|
@ -148,6 +148,28 @@ rec {
|
||||||
/* A combination of `traceVal` and `traceSeqN`. */
|
/* A combination of `traceVal` and `traceSeqN`. */
|
||||||
traceValSeqN = traceValSeqNFn id;
|
traceValSeqN = traceValSeqNFn id;
|
||||||
|
|
||||||
|
/* Trace the input and output of a function `f` named `name`,
|
||||||
|
both down to `depth`.
|
||||||
|
|
||||||
|
This is useful for adding around a function call,
|
||||||
|
to see the before/after of values as they are transformed.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
traceFnSeqN 2 "id" (x: x) { a.b.c = 3; }
|
||||||
|
trace: { fn = "id"; from = { a.b = {…}; }; to = { a.b = {…}; }; }
|
||||||
|
=> { a.b.c = 3; }
|
||||||
|
*/
|
||||||
|
traceFnSeqN = depth: name: f: v:
|
||||||
|
let res = f v;
|
||||||
|
in lib.traceSeqN
|
||||||
|
(depth + 1)
|
||||||
|
{
|
||||||
|
fn = name;
|
||||||
|
from = v;
|
||||||
|
to = res;
|
||||||
|
}
|
||||||
|
res;
|
||||||
|
|
||||||
|
|
||||||
# -- TESTING --
|
# -- TESTING --
|
||||||
|
|
||||||
|
|
|
@ -130,7 +130,7 @@ let
|
||||||
assertMsg assertOneOf;
|
assertMsg assertOneOf;
|
||||||
inherit (self.debug) addErrorContextToAttrs traceIf traceVal traceValFn
|
inherit (self.debug) addErrorContextToAttrs traceIf traceVal traceValFn
|
||||||
traceXMLVal traceXMLValMarked traceSeq traceSeqN traceValSeq
|
traceXMLVal traceXMLValMarked traceSeq traceSeqN traceValSeq
|
||||||
traceValSeqFn traceValSeqN traceValSeqNFn traceShowVal
|
traceValSeqFn traceValSeqN traceValSeqNFn traceFnSeqN traceShowVal
|
||||||
traceShowValMarked showVal traceCall traceCall2 traceCall3
|
traceShowValMarked showVal traceCall traceCall2 traceCall3
|
||||||
traceValIfNot runTests testAllTrue traceCallXml attrNamesToStr;
|
traceValIfNot runTests testAllTrue traceCallXml attrNamesToStr;
|
||||||
inherit (self.misc) maybeEnv defaultMergeArg defaultMerge foldArgs
|
inherit (self.misc) maybeEnv defaultMergeArg defaultMerge foldArgs
|
||||||
|
|
Loading…
Reference in New Issue