diff options
author | Profpatsch <mail@profpatsch.de> | 2021-01-24 11:33:41 +0100 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2021-01-25 19:25:50 +0100 |
commit | 41e13149f72bf1a5ef6a0f9b1da7c1c31cbc108a (patch) | |
tree | 55f4c760156b3109260498eebe25a58fcbcff39e /lib/debug.nix | |
parent | ec334a1b01c491faa3463c96717b71921dddef2c (diff) |
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; }; }; } ```
Diffstat (limited to 'lib/debug.nix')
-rw-r--r-- | lib/debug.nix | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/debug.nix b/lib/debug.nix index ea6aed60ab43a..e3ca3352397ec 100644 --- a/lib/debug.nix +++ b/lib/debug.nix @@ -148,6 +148,28 @@ rec { /* A combination of `traceVal` and `traceSeqN`. */ 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 -- |