aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/print-options.hh
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-08 08:25:42 +0100
committereldritch horrors <pennae@lix.systems>2024-03-09 07:20:23 -0700
commit1958152d146389b00c50a149c33012a16864ef83 (patch)
tree1a6fb0cbaa147e26dc661092d88bdb6dd7adfdf1 /src/libexpr/print-options.hh
parentb221a14f0a477db06f8ab705bd08404e431ec135 (diff)
Pretty-print values in the REPL
Pretty-print values in the REPL by printing each item in a list or attrset on a separate line. When possible, single-item lists and attrsets are printed on one line, as long as they don't contain a nested list, attrset, or thunk. Before: ``` { attrs = { a = { b = { c = { }; }; }; }; list = [ 1 ]; list' = [ 1 2 3 ]; } ``` After: ``` { attrs = { a = { b = { c = { }; }; }; }; list = [ 1 ]; list' = [ 1 2 3 ]; } ``` (cherry picked from commit c0a15fb7d03dfb8f53bc6726c414bc88aa362592) Change-Id: Ia2b41849165a5ddb63f7a8c272a2476b3e4292df
Diffstat (limited to 'src/libexpr/print-options.hh')
-rw-r--r--src/libexpr/print-options.hh22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/libexpr/print-options.hh b/src/libexpr/print-options.hh
index e03746ece..94767df9c 100644
--- a/src/libexpr/print-options.hh
+++ b/src/libexpr/print-options.hh
@@ -17,24 +17,29 @@ struct PrintOptions
* If true, output ANSI color sequences.
*/
bool ansiColors = false;
+
/**
* If true, force values.
*/
bool force = false;
+
/**
* If true and `force` is set, print derivations as
* `«derivation /nix/store/...»` instead of as attribute sets.
*/
bool derivationPaths = false;
+
/**
* If true, track which values have been printed and skip them on
* subsequent encounters. Useful for self-referential values.
*/
bool trackRepeated = true;
+
/**
* Maximum depth to evaluate to.
*/
size_t maxDepth = std::numeric_limits<size_t>::max();
+
/**
* Maximum number of attributes in attribute sets to print.
*
@@ -42,6 +47,7 @@ struct PrintOptions
* attribute set encountered.
*/
size_t maxAttrs = std::numeric_limits<size_t>::max();
+
/**
* Maximum number of list items to print.
*
@@ -49,10 +55,26 @@ struct PrintOptions
* list encountered.
*/
size_t maxListItems = std::numeric_limits<size_t>::max();
+
/**
* Maximum string length to print.
*/
size_t maxStringLength = std::numeric_limits<size_t>::max();
+
+ /**
+ * Indentation width for pretty-printing.
+ *
+ * If set to 0 (the default), values are not pretty-printed.
+ */
+ size_t prettyIndent = 0;
+
+ /**
+ * True if pretty-printing is enabled.
+ */
+ inline bool prettyPrint()
+ {
+ return prettyIndent > 0;
+ }
};
/**