nix attrsets 的漂亮打印

问题描述 投票:0回答:3

在 nix 中开发时,我通常使用

builtins.trace
进行调试:

代码中

a = { foo = "bar"; ... more complex nested attrset ...};
builtins.trace a a;

在 nix-repl 中

在复杂的数据结构上使用

:p a
也确实很难阅读。

问题

但是,输出只是一行,没有任何格式,对于复杂的数据结构,这几乎无法用于调试。

问题

nix 中是否有一个漂亮的打印函数,它可以进行一些缩进和添加换行符?或者更好的彩色输出?

理想输出

我想看到这样的东西:

default = {
  active = { 
    check_ssl = [
      {
        tags = [ "mycustomtag" ];
        host = "kotalla.de";
        ipv6 = false;
        name = "ssl11";
      }
      {
        tags = [ "mycustomtag" ];
        host = "kotalla.de";
        ipv6 = false;
        name = "ssl2";
      }
    ];
    check_http = [
      {
        host = "kotalla.de";
        port = 80;
        url = "/foo";
        contains = "Labor";
        name = "http";
      }
    ];
    check_ssh = [
      {
        host = "mail.lastlog.de";
        port = 20202;
        name = "ssh";
      }
    ];
  };

我的黑客

我所知道的:

nix nixos
3个回答
2
投票

Nixfmt 是一种流行的 Nix 代码格式化程序: https://github.com/Gabriel439/nixfmt


1
投票

https://github.com/haskell-nix/hnix/tree/50e63f80afa8323b25b692533e731eea641e56af#parse--print

使用 hnix 解析文件并漂亮地打印结果:

hnix file.nix 


0
投票

如果这对未来的读者感兴趣,我制作了一个 Nix 的 fork,添加了漂亮的打印,但它仅用于

nix repl
,所以它导出的应用程序是
nix-repl
,我仍然使用上游 Nix 的其他一切。默认情况下它还启用了 Flakes,因此它不应该这么快就发生位腐烂。不过,如果我继续使用 Nix,我计划在有相关更改时每隔一段时间从上游进行合并。

© www.soinside.com 2019 - 2024. All rights reserved.