forked from lix-project/lix
eldritch horrors
512c1f05c3
Previously, there were two mostly-identical value printers -- one in
`libexpr/eval.cc` (which didn't force values) and one in
`libcmd/repl.cc` (which did force values and also printed ANSI color
codes).
This PR unifies both of these printers into `print.cc` and provides a
`PrintOptions` struct for controlling the output, which allows for
toggling whether values are forced, whether repeated values are tracked,
and whether ANSI color codes are displayed.
Additionally, `PrintOptions` allows tuning the maximum number of
attributes, list items, and bytes in a string that will be displayed;
this makes it ideal for contexts where printing too much output (e.g.
all of Nixpkgs) is distracting. (As requested by @roberth in
https://github.com/NixOS/nix/pull/9554#issuecomment-1845095735)
Please read the tests for example output.
Future work:
- It would be nice to provide this function as a builtin, perhaps
`builtins.toStringDebug` -- a printing function that never fails would
be useful when debugging Nix code.
- It would be nice to support customizing `PrintOptions` members on the
command line, e.g. `--option to-string-max-attrs 1000`.
(cherry picked from commit 0fa08b451682fb3311fe58112ff05c4fe5bee3a4, )
===
Restore ambiguous value printer for `nix-instantiate`
The Nix team has requested that this output format remain unchanged.
I've added a warning to the man page explaining that `nix-instantiate
--eval` output will not parse correctly in many situations.
(cherry picked from commit df84dd4d8dd3fd6381ac2ca3064432ab31a16b79)
Change-Id: I7cca6b4b53cd0642f2d49af657d5676a8554c9f8
25 lines
588 B
C++
25 lines
588 B
C++
#pragma once
|
|
|
|
#include "value.hh"
|
|
|
|
namespace nix {
|
|
|
|
/**
|
|
* Print a value in the deprecated format used by `nix-instantiate --eval` and
|
|
* `nix-env` (for manifests).
|
|
*
|
|
* This output can't be changed because it's part of the `nix-instantiate` API,
|
|
* but it produces ambiguous output; unevaluated thunks and lambdas (and a few
|
|
* other types) are printed as Nix path syntax like `<CODE>`.
|
|
*
|
|
* See: https://github.com/NixOS/nix/issues/9730
|
|
*/
|
|
void printAmbiguous(
|
|
Value &v,
|
|
const SymbolTable &symbols,
|
|
std::ostream &str,
|
|
std::set<const void *> *seen,
|
|
int depth);
|
|
|
|
}
|