【问题标题】:How to show where function was defined in nix?如何显示在 nix 中定义函数的位置?
【发布时间】:2018-04-12 15:35:49
【问题描述】:

在 nix 中是否有任何方法可以检查函数的定义位置,查看其源代码?

例如,我有函数writeScript,如何查看它来自哪里?

【问题讨论】:

    标签: nix


    【解决方案1】:

    Nix 将在 lambda 术语的“描述”中报告它。我将在这里假设 Nix 2.0。

    $ nix --version
    nix (Nix) 2.0
    $ nix repl '<nixpkgs>'
    Welcome to Nix version 2.0. Type :? for help.
    
    Loading '<nixpkgs>'...
    Added 8606 variables.
    
    nix-repl> writeScript
    «lambda @ /nix/store/5m86fk1jw1pcrysckb6kam77jdxh3kgd-nixos-18.03.131802.4b4bbce199d/nixos/pkgs/build-support/trivial-builders.nix:57:17»
    
    nix-repl> 
    

    此位置有时可能与您的预期不同,因为它不会将您带到定义名称的位置,而是将您带到实际 lambda 所在的位置。

    nix-repl> map (x: x)
    «primop-app»
    
    nix-repl> l: map (x: x) l
    «lambda @ (string):1:1»
    

    为了简单性和性能,Nix 评估器根本不会为每个定义保留该信息。因此,有时您需要使用grep 或类似工具进行蛮力搜索。请注意,github 不会索引像 pkgs/top-level/all-packages.nix 这样的大文件。

    【讨论】:

    • 非常有帮助!找不到fetchGit 来自哪里,原来是它的primop,哈哈)
    • search.nix.gsc.io 上有一个强大的 Nix 源搜索工具——这是一个查找 writeScript = 定义的查询:search.nix.gsc.io/…
    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多