summary refs log tree commit diff
path: root/lib/debug.nix
Commit message (Collapse)AuthorAge
* lib/debug: add traceFnSeqNProfpatsch2021-01-25
| | | | | | | | | | | | | | | | | | | | | | | | | 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; }; }; } ```
* lib: Use Nix's static scope checking, fix error message, optimizeRobert Hensing2020-10-22
| | | | | | | | | | | | | | | | | | | Nix can perform static scope checking, but whenever code is inside a `with` expression, the analysis breaks down, because it can't know statically what's in the attribute set whose attributes were brought into scope. In those cases, Nix has to assume that everything works out. Except it doesnt. Removing `with` from lib/ revealed an undefined variable in an error message. If that doesn't convince you that we're better off without `with`, I can tell you that this PR results in a 3% evaluation performance improvement because Nix can look up local variables by index. This adds up with applications like the module system. Furthermore, removing `with` makes the binding site of each variable obvious, which helps with comprehension.
* lib/debug: Update documentation comments for docs generationVincent Ambo2018-10-29
| | | | | | | Documents functions in `lib.debug` for docs generation with nixdoc. Note that type signatures and clearer descriptions are still missing on some of these functions, but this is good enough for a first run.
* lib.debug: fix traceValSeqFnMatthieu Coudron2018-07-15
| | | | was calling the wrong parent version.
* lib/debug: add replacement instructions & release notesProfpatsch2018-04-27
| | | | for every deprecated function.
* lib/debug: document module & functions, prune importsProfpatsch2018-04-27
|
* lib/debug: deprecate `traceCallXml`Profpatsch2018-04-27
| | | | Incompletely documented, and a FIXME/bug that has been there for years.
* lib/debug: deprecate `addErrorContextToAttrs`Profpatsch2018-04-27
| | | | | | The function isn’t used anywhere and `addErrorContext` is an undocumented builtin. The builtin is explicitely qualified at its two uses in the module system.
* lib/debug: deprecate `traceValIfNot`Profpatsch2018-04-27
| | | | | The function is only used in exactly one module and overly specific (`c` must be a true predicate for `x`, if not, a specific trace is called).
* lib/debug: deprecate attrNamesToStr, traceXMLVal(Marked)Profpatsch2018-04-27
| | | | | | | `attrNamesToStr` is very specific (and pretty trivial), so it doesn’t make sense to have it in the library. `traceXMLVal(Marked)` are just a builtin and `trace` and not very useful in general (trace output should not be parsed anyway).
* lib/debug: deprecate & modernize showValProfpatsch2018-04-27
| | | | | The code is re-implemented in terms of `generators.toPretty`, but is strictly less general than `traceValSeqN`, so we deprecate it.
* lib/debug: remove the deprecated strict functionProfpatsch2018-04-27
| | | | The grace period was long enough.
* lib/debug: add traceValFn, traceValSeqFn, traceValSeqNFnProfpatsch2018-04-27
| | | | | Being able to modify the value on-the-fly before printing is very useful in practice.
* Add setFunctionArgs lib function.Shea Levy2018-01-31
| | | | | | Among other things, this will allow *2nix tools to output plain data while still being composable with the traditional callPackage/.override interfaces.
* Convert libs to a fixed-pointGraham Christensen2017-09-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This does break the API of being able to import any lib file and get its libs, however I'm not sure people did this. I made this while exploring being able to swap out docFn with a stub in #2305, to avoid functor performance problems. I don't know if that is going to move forward (or if it is a problem or not,) but after doing all this work figured I'd put it up anyway :) Two notable advantages to this approach: 1. when a lib inherits another lib's functions, it doesn't automatically get put in to the scope of lib 2. when a lib implements a new obscure functions, it doesn't automatically get put in to the scope of lib Using the test script (later in this commit) I got the following diff on the API: + diff master fixed-lib 11764a11765,11766 > .types.defaultFunctor > .types.defaultTypeMerge 11774a11777,11778 > .types.isOptionType > .types.isType 11781a11786 > .types.mkOptionType 11788a11794 > .types.setType 11795a11802 > .types.types This means that this commit _adds_ to the API, however I can't find a way to fix these last remaining discrepancies. At least none are _removed_. Test script (run with nix-repl in the PATH): #!/bin/sh set -eux repl() { suff=${1:-} echo "(import ./lib)$suff" \ | nix-repl 2>&1 } attrs_to_check() { repl "${1:-}" \ | tr ';' $'\n' \ | grep "\.\.\." \ | cut -d' ' -f2 \ | sed -e "s/^/${1:-}./" \ | sort } summ() { repl "${1:-}" \ | tr ' ' $'\n' \ | sort \ | uniq } deep_summ() { suff="${1:-}" depth="${2:-4}" depth=$((depth - 1)) summ "$suff" for attr in $(attrs_to_check "$suff" | grep -v "types.types"); do if [ $depth -eq 0 ]; then summ "$attr" | sed -e "s/^/$attr./" else deep_summ "$attr" "$depth" | sed -e "s/^/$attr./" fi done } ( cd nixpkgs #git add . #git commit -m "Auto-commit, sorry" || true git checkout fixed-lib deep_summ > ../fixed-lib git checkout master deep_summ > ../master ) if diff master fixed-lib; then echo "SHALLOW MATCH!" fi ( cd nixpkgs git checkout fixed-lib repl .types )
* lib/debug: traceSeqN & traceSeqValNProfpatsch2017-06-22
| | | | | Strict trace functions that only go down to a specified depth. Handy to get a better picture and prevent infinite recursions.
* lib: fix mixed tab/space indents, trailing whitespace, etcBenjamin Staffin2017-03-11
| | | | | | Nix style seems to have settled on not using spaces between bound variable names and the lambda : so I also tried to make those somewhat more consistent throughout.
* debug.nix: deprecate strictProfpatsch2016-06-26
| | | | | | Replace the implementation by seq and add a deprecation warning. The semantics seems a little bit off, but the function should only be used for debugging.
* debug.nix: add traceSeq & traceValSeqProfpatsch2016-06-26
| | | | | Debugging functions that strictly deep-evaluate the argument that should be traced.
* lib: cleanup a little bit, add traceIfJan Malakhovski2015-03-26
|
* Remove obsolete checks for missing primopsEelco Dolstra2014-10-05
|
* Move pkgs/lib/ to lib/Eelco Dolstra2013-10-10